Глядя на популярность 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 db mongodb.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":"[email protected]"}' 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 |