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.