MEAN
MEAN (розшифровується як MongoDB, Express.js, Angular.js, Node.js) - це набір програмного забезпечення для веб розробки. Його перевагою є те, що всі компоненти використовують програми написані на JavaScript, тому можна запрограмувати всю програму використовуючи єдину мову.
Як почати проект
ред.Є теорія, що найлегше щось вчити - коли знаєш для чого вчишся. (Див. статтю Потяг до програмування). Але з програмуванням є проблема - навіть якщо людина знає що вона хоче - не факт що того що вона хоче можна досягти програмуванням. А людина дуже часто навіть не знає чого хоче. Ввесь процес програмування - це зближення двох точок - того чого хочеш і того що маєш/можеш.
Тому ви можете не переживати що колись комп’ютери стануть такі розумні що зможуть робити все що їм скаже людина і програмісти стануть непотрібні. Тоді стануть потрібними спеціалісти які зможуть дізнатись що ж все таки людина хоче, і нормально пояснити це комп’ютеру. Хоча такі спеціалісти існують і зараз, та називаються бізнес-аналітиками. Їхнє завдання - витягнути з замовника вимоги щодо проекту, і пояснити їх програмістам.
І тому корисно вибрати щось що ви хочете зробити. Це допоможе вам спостерегти як ваші бажання змінюються і уточнюються в процесі розширення ваших можливостей. А спостереження за тим як ваш проект стає все кращим і кращим додасть мотивації вчитися.
Хостинг проектів
ред.В наш час більшість проектів окрім комп’ютера програміста зберігаються на якомусь хостингу для проектів. Окрім того що це дозволяє не втратити напрацьоване коли комп’ютер ламається, це допомагає краще організовувати роботу, і отримувати допомогу від колег.
Тут ми розглядатимемо дуже популярний хостинг проектів GitHub, який працює з дуже популярною системою керування версій Git. Про керування версіями трохи далі, а вам раджу зайти на https://github.com/ і зареєструватись там. Тоді ви зможете створювати репозиторії. Знайдіть кнопку "New repository" і натисніть її.
- Code
- Issues
Приєднання сертифікатів
ред.Git
ред.GitHub Pages
ред.Github також дозволяє створити собі маленький статичний сайт. Статичний, в тому розумінні що корстувачі які з ним взаємодіють, не зможуть нічого на ньому зберегти. Тобто якщо ви наприклад захочете додати коментарі - їх доведеться додавати за допомогою якогось зовнішнього сервісу на зразок Disqus.
Існує два способи створити сторінку на Github. Перший - завести репозиторій що називається username.github.io
, де, звісно, замість username
має стояти ваше ім’я. Наприклад bunyk. Тоді за адресою https://bunyk.github.io/ з’явиться вміст файлу index.htm
вашого репозиторію. Якщо в репозиторії є директорії з іншими файлами - на сайті з’являться й відповідні сторінки.
Другий спосіб - завести в якомусь з ваших репозиторіїв гілку gh-pages
. І тоді за адресою https://username.github.io/project-name/ теж з’явиться вміст файлу index.html та всіх інших файлів в цій гілці.
Інсталяція Node.js
ред.Ubuntu
ред.На Ubuntu все як завжди ставиться дуже просто:
sudo apt-get install nodejs
Docker
ред.Хоча середовище розробки варто було б ізолювати і помістити в якийсь акуратний контейнер. Правда треба час аби придумати як це найкраще зробити.
Модулі Node.js
ред.Модулі в Node.js - це звичайні файли. Ввесь код всередині модуля виглядає так ніби він загорнутий в функцію. Тобто всі змінні і функції які ви опишете - приватні. Крім об’єкта exports
.
Приклад:
// my_module.js
exports.hello = function hello() {
console.log('Привіт, світе!');
};
// app.js
hello_module = require('./my_module')
hello_module.hello()
Якщо треба щоб exports був функцією, або задати його одним присвоєнням об’єкта - присвойте його module.exports
. Напряму присвоїти нове значення змінній exports
не вийде, бо це створить нову локальну змінну в модулі, і ззовні нічого не буде доступно.
Приклад:
// my_module.js
module.exports = function hello() {
console.log('Привіт, світе!');
};
// app.js
hello_module = require('./my_module')
hello_module()
Щоб визначити чи модуль запускається напряму (node module.js
) чи імпортується з іншого модуля (require(module)
), можна використовуючи умову require.main == module
Якщо require
отримує назву директорії, то require завантажить те що написано в полі "main"
в розділі package.json
. Інакше треба дивитись index.js
, index.json
або index.node
(двійковий файл).
Знайомство з фреймворком Express.js
ред.Ініціалізація проекту
ред.Для початку створімо директорію проекту, і перейдімо туди. Нехай наш проект називається animals
.
~$ mkdir animals
~$ cd animals
Тепер ініціалізуємо проект, створивши в ньому файл package.json
. Для цього використовується команда
~/animals$ npm init
Вона задасть вам кілька питань, на всі з яких підходить стандартна відповідь і створить файл з подібним вмістом:
{
"name": "animals",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Тепер потрібно додати в наш проект залежність від фреймворка Express. Це робить команда:
~/animals$ npm install express --save
Вона завантажує всі файли фреймворка в піддиректорію проекту node_modules
, а опція --save
вказує на те, що залежність від цього пакета треба записати в нашому файлі проекту package.json
:
- "license": "ISC"
+ "license": "ISC",
+ "dependencies": {
+ "express": "^4.13.4"
+ }
Таким чином ми можемо поширювати з нашим проектом лише файл package.json
а не всю директорію node_modules
, і при потребі встановити всі залежності однією командою з кореневого каталогу проекту:
~/animals$ npm install
Привіт, світе!
ред.Що ж, все встановлено, давайте писати код!
Ось код що створює сервер який повертає текст "Hello, world!" для початкової сторінки:
var express = require('express')
var app = express();
app.get('/', function(req, res) {
res.send('Hello, world!');
});
app.listen(3000);
console.log('Server listening on 3000');
MongoDB
ред.npm install --save mongodb
var mongodb = require('mongodb');
var uri = 'mongodb://localhost:27017/example'
mongodb.MongoClient.connect(uri, function(error, db) {
if(error) {
console.log(error);
process.exit(1);
}
db.collection('users').insert(
{name: 'taras'},
function(error, result) {
if(error) {
console.log(error);
process.exit(1);
}
if(result) {
console.log(result);
process.exit(1);
}
}
);
});
Mongoose
ред.npm install --save mongoose
var mongoose = require('mongoose');
mongoose.Promise = global.Promise;
var userSchema = require('./user');
mongoose.connect('mongodb://localhost:27017/example');
var User = mongoose.model('User', userSchema, 'user');
var user = new User({
name: 'Taras',
email: 'tbunyk@gmail.com',
});
user.save(function(err, res) {
console.log(err, res);
process.exit();
});
OAuth авторизація
ред.npm install --save express-session npm install --save passport passport-facebook
Функціональне тестування з Protractor
ред.Protractor (з англійської - транспортир) - бібліотека для написання автоматизованих тестів, які використовують браузер і намагаються моделювати поведінку користувача, тобто натискають кнопки, відкривають сторінки, вводять текст в поля і т.п.
Інсталяція
ред.Для керування браузером нам потрібен Selenium webdriver, який працює на Java, тому переконайтесь що у вас встановлено Java Development Kit (вивід команди java -version
)[1]
npm install -g protractor
В цьому пакеті містяться скрипти protractor
(який запускає тести) та webdriver-manager
(який запускає сервер що керує браузером), і якого потрібно оновити:
webdriver-manager update
А тоді запустити:
webdriver-manager start
- ↑ angularjs - Protractor - error when starting webdriver-manager, seleniumProcess.pid: undefined. Stack Overflow. Процитовано 12 березня 2016.