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: '[email protected]', });
user.save(function(err, res) { console.log(err, res); process.exit(); });
OAuth авторизація Facebook npm install --save express-session npm install --save passport passport-facebook
Функціональне тестування з Protractor Protractor (з англійської - транспортир) - бібліотека для написання автоматизованих тестів, які використовують браузер і намагаються моделювати поведінку користувача, тобто натискають кнопки, відкривають сторінки, вводять текст в поля і т.п.
Інсталяція Для керування браузером нам потрібен Selenium webdriver, який працює на Java, тому переконайтесь що у вас встановлено Java Development Kit (вивід команди java -version)
npm install -g protractor
В цьому пакеті містяться скрипти protractor (який запускає тести) та webdriver-manager (який запускає сервер що керує браузером), і якого потрібно оновити:
webdriver-manager update
А тоді запустити:
webdriver-manager start