Глядя на популярность Node.js , я подумал об изучении и создании API отдыха, который должен создавать, удалять и извлекать сотрудников из базы данных, и, к счастью, я это сделал.
В этом посте я постараюсь повторить шаги, которые я выполнял при написании, вместе со ссылками.
Предполагая, что Node.js уже установлен в нашей системе, давайте начнем создавать nodejs-rest-api , выполнив следующие шаги:
Шаг 1: Создайте каталог, который будет содержать все файлы, связанные с нашим приложением, для меня это / Users / ArpitAggarwal / nodejs-rest-api и выполните npm init :
|
1
2
3
|
$ cd /Users/ArpitAggarwal/$ mkdir nodejs-rest-api$ npm init |
Указанная выше команда npm init создаст package.json, который поможет нам управлять зависимостями.
Шаг 2: Установите Express как зависимость:
|
1
2
|
$ cd /Users/ArpitAggarwal/nodejs-rest-api/$ npm install --save express |
Шаг 3: Создайте точку входа по умолчанию для Node.js, т.е. server.js , в том же каталоге, который мы создали ранее:
|
1
2
|
$ cd /Users/ArpitAggarwal/nodejs-rest-api/$ touch server.js |
Скопируйте ниже содержание в server.js :
|
1
2
3
4
5
6
7
8
|
const express = require('express');const app = express();app.listen(9999, function() { console.log('Node server listening on 9999')})app.use(express.static(__dirname + '/public')); |
Давайте разберемся, что означает каждая строка.
require — импортировать модули в текущий файл
const express = require (‘express’) — Создает приложение Express.
const app = express () — Является ли объект приложения условно обозначенным приложением Express.
app.listen (9999) — запускает сокет UNIX и прослушивает соединения по заданному пути.
app.use (express.static (__dirname + ‘/ public’)) — экспресс-доставка статического содержимого для приложения из каталога «public» в каталоге приложения.
Шаг 4. Создайте index.html в каталоге / Users / ArpitAggarwal / nodejs-rest-api / public следующим образом:
|
1
2
3
4
|
$ cd /Users/ArpitAggarwal/nodejs-rest-api/$ mkdir public$ cd public$ touch index.html |
Скопируйте ниже содержание в index.html :
|
1
|
Hello Node! |
Шаг 5: Измените server.js, добавив отображение GET для отображения только что созданного index.html :
|
1
2
3
|
app.get('/', function(req, res){ res.sendFile('/index.html')}); |
Шаг 6: Перейдите в каталог / Users / ArpitAggarwal / nodejs-rest-api и запустите приложение, выполнив следующую команду:
|
1
2
|
$ cd /Users/ArpitAggarwal/nodejs-rest-api$ node server.js |
Теперь откройте http: // localhost: 9999 / в браузере или выполните команду:
|
1
|
curl http://localhost:9999 |
покажет нам «Hello Node!» как ответ.
Шаг 7: Теперь мы установим MongoDB как зависимость, перемещаясь в каталог / Users / ArpitAggarwal / nodejs-rest-api / :
|
1
2
|
$ cd /Users/ArpitAggarwal/nodejs-rest-api/$ npm install --save mongodb |
Шаг 8. Создайте config.js, в котором будут храниться все настраиваемые параметры приложения, такие как имя пользователя, пароль, URL-адреса и т. Д. Это в основном помогает нам указать входные данные для приложения во время выполнения на основе различных сред, в которых мы собираемся запустить приложение:
|
1
2
|
$ cd /Users/ArpitAggarwal/nodejs-rest-api/$ touch config.js |
Скопируйте приведенный ниже контент в config.js :
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
var config = {};config.mongodb = {};config.server = {};config.server.port = process.env.WEB_PORT || 9999;config.mongodb.username = process.env.MONGODB_USERNAME || 'arpit';config.mongodb.password= process.env.MONGODB_PASSWORD || 'xxxx';config.mongodb.host= process.env.MONGODB_HOST || 'ds047752.mlab.com';config.mongodb.port = process.env.MONGODB_PORT || 47752;config.mongodb.databaseName = process.env.MONGODB_NAME || 'my-database';module.exports = config; |
Замените свойства своими или экспортируйте из командной строки перед запуском приложения, например:
|
1
2
3
|
$ cd /Users/ArpitAggarwal/nodejs-rest-api/$ export MONGODB_PASSWORD = p@ssword$ node server.js |
Шаг 9: Создайте mongodb.js, где мы определим MongoClient и экспортируем соединение с базой данных, а также объект базы данных, чтобы использовать его без избыточности, определяя в одном месте, следующим образом:
|
1
2
|
$ cd /Users/ArpitAggarwal/nodejs-rest-api/$ touch mongodb.js |
Скопируйте содержимое ниже в mongodb.js :
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
var MongoClient = require( 'mongodb' ).MongoClient;var util = require('util');var config = require('./config');var _db;var uri = util.format('mongodb://%s:%s@%s:%d/%s', config.mongodb.username, config.mongodb.password, config.mongodb.host, config.mongodb.port, config.mongodb.databaseName);module.exports = { connectToServer: function( callback ) { /** Connect to the Mongo database at the URI using the client **/ MongoClient.connect( uri, { auto_reconnect: true }, function( err, db ) { if (err) throw err; else if (!db) console.log('Unknown error connecting to database'); else { console.log('Connected to MongoDB database server at:'); console.log('\n\t%s\n', uri); _db = db; } return callback( err ); } ); }, getDb: function() { return _db; }}; |
require (‘mongodb’) .MongoClient, указанный выше, создает новый экземпляр MongoClient .
var config = require (‘./ config’) — импортирует config.js в текущий файл.
Шаг 10: Теперь давайте изменим server.js, чтобы использовать два вышеупомянутых файла, которые мы только что создали, и настроим сервер для прослушивания на указанном порту только при успешном соединении с MongoDB:
|
01
02
03
04
05
06
07
08
09
10
|
const mongodb = require('./mongodb.js');const config = require('./config.js');var dbmongodb.connectToServer( function( err ) { app.listen(config.server.port, function() { console.log('Node server listening on ' + config.server.port); db = mongodb.getDb(); })}); |
Шаг 11: Затем измените запрос GET в server.js, чтобы получить список сотрудников из базы данных, используя только что созданный MongoClient , следующим образом:
|
1
2
3
4
5
6
7
8
|
app.get('/employee/get', function(req, res){ db.collection('employees').find().toArray(function(err, results) { res.send(results); }) res.set({ 'Cache-Control': 'no-cache' });}); |
Выполнение команды ниже перечислит всех сотрудников, которых мы создаем:
|
1
|
$ curl http://localhost:9999/employee/get |
Шаг 12: Двигаемся дальше, чтобы расширить наше приложение для создания сотрудника в базе данных, добавив запрос POST . Но, прежде чем вводить POST-запрос, мы должны установить body-parser в качестве зависимости узла, которая поможет в анализе тела входящих запросов в промежуточном программном обеспечении, следующим образом:
|
1
2
|
$ cd /Users/ArpitAggarwal/nodejs-rest-api/$ npm install --save body-parser |
Как и в случае других зависимостей, мы должны импортировать его с помощью ключевого слова require, чтобы использовать возможность анализа запроса JSON следующим образом:
|
01
02
03
04
05
06
07
08
09
10
|
const bodyParser= require('body-parser')app.use(bodyParser.json())app.post('/employee/create', (req, res) => { db.collection('employees').save(req.body, (err, result) => { if (err) return console.log(err) res.send('Employee created!'); })}) |
Теперь для POST все готово , давайте создадим сотрудника:
|
1
|
$ curl -H "Content-Type: application/json" -X POST -d '{"name": "Arpit Aggarwal","email":"aggarwalarpit.89@gmail.com"}' http://localhost:9999/employee/create |
Далее мы расширим наше приложение для удаления сотрудника и определим отображение DELETE в server.js следующим образом:
|
1
2
3
4
5
6
7
|
app.delete('/employee/delete', (req, res) => { db.collection('employees').findOneAndDelete({name: req.body.name}, (err, result) => { if (err) return res.send(500, err) res.send('Employee deleted!') })}) |
Давайте проверим УДАЛИТЬ вызов:
|
1
|
curl -H "Content-Type: application/json" -X DELETE -d '{"name": "Arpit Aggarwal"}' http://localhost:9999/employee/delete |
Устали от перезапуска сервера Node.js каждый раз, когда вы вносите изменения в приложение?
Если да, мы можем использовать Nodemon , утилиту, которая будет отслеживать любые изменения в нашем источнике и автоматически перезагружать наш сервер. Давайте установим это глобально:
|
1
|
$ npm install -g nodemon |
После установки мы должны запустить наше приложение с nodemon вместо node , например:
|
1
2
|
$ cd /Users/ArpitAggarwal/nodejs-rest-api/$ nodemon server.js |
Полный исходный код размещен на github .
| Ссылка: | Написание сервиса RESTful с использованием Node, Express и MongoDB от нашего партнера JCG |