考虑到Node.js的流行,我想到了学习和创建一个REST API,该API应该创建,删除数据库并从数据库中获取雇员,所幸我做到了。
在这篇文章中,我将尝试复制与参考一起编写时所遵循的步骤。
假设我们的系统中已经安装了Node.js,让我们开始按照以下步骤创建nodejs-rest-api :
第1步:创建一个目录,其中将包含与我们的应用程序相关的所有文件,对我来说,它是/ Users / ArpitAggarwal / nodejs-rest-api并执行npm init :
$ cd /Users/ArpitAggarwal/
$ mkdir nodejs-rest-api
$ npm init
上面指定的npm init命令将创建package.json ,这有助于我们管理依赖项。
步骤2:安装Express作为依赖项:
$ cd /Users/ArpitAggarwal/nodejs-rest-api/
$ npm install --save express
步骤3:在我们之前创建的同一目录内,为Node.js创建默认入口点,即server.js :
$ cd /Users/ArpitAggarwal/nodejs-rest-api/
$ touch server.js
复制以下server.js中的内容:
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')) – Express从应用程序目录中的“ public”目录为应用程序提供静态内容。
步骤4:在目录/ Users / ArpitAggarwal / nodejs-rest-api / public中创建index.html ,如下所示:
$ cd /Users/ArpitAggarwal/nodejs-rest-api/
$ mkdir public
$ cd public
$ touch index.html
复制以下index.html中的内容:
Hello Node!
步骤5:修改server.js以添加GET映射以显示我们刚刚创建的index.html :
app.get('/', function(req, res){
res.sendFile('/index.html')
});
步骤6:移至目录/ Users / ArpitAggarwal / nodejs-rest-api并按照以下命令启动应用程序:
$ cd /Users/ArpitAggarwal/nodejs-rest-api
$ node server.js
现在,在浏览器中打开http:// localhost:9999 /或执行命令:
curl http://localhost:9999
会向我们显示“你好节点!” 作为回应。
步骤7:现在,我们将MongoDB作为依赖项安装到目录/ Users / ArpitAggarwal / nodejs-rest-api /中 :
$ cd /Users/ArpitAggarwal/nodejs-rest-api/
$ npm install --save mongodb
步骤8:创建config.js ,它将存储应用程序的所有可配置参数,例如用户名,密码,URL等。它基本上可以帮助我们根据要运行的环境,在运行时为应用程序指定输入该应用程序:
$ cd /Users/ArpitAggarwal/nodejs-rest-api/
$ touch config.js
将以下内容复制到config.js中 :
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;
在启动应用程序之前,请用您的属性替换属性或从命令行导出属性,例如:
$ cd /Users/ArpitAggarwal/nodejs-rest-api/
$ export MONGODB_PASSWORD = p@ssword
$ node server.js
第9步:创建mongodb.js ,在其中定义MongoClient并将导出到数据库的连接以及数据库对象导出到数据库,以便在一个位置进行定义时以一种非冗余的方式进行使用,如下所示:
$ cd /Users/ArpitAggarwal/nodejs-rest-api/
$ touch mongodb.js
将以下内容复制到mongodb.js中 :
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连接成功时才在指定端口上侦听:
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:接下来,使用刚刚创建的MongoClient修改server.js中的 GET请求,以从数据库中获取雇员列表,如下所示:
app.get('/employee/get', function(req, res){
db.collection('employees').find().toArray(function(err, results) {
res.send(results);
})
res.set({
'Cache-Control': 'no-cache'
});
});
执行以下命令将列出我们创建的所有员工:
$ curl http://localhost:9999/employee/get
步骤12:通过添加POST请求,进一步扩展我们的应用程序以在数据库中创建员工。 但是,在引入POST请求之前,我们必须安装body-parser作为节点依赖项,这将有助于解析中间件中的传入请求主体,如下所示:
$ cd /Users/ArpitAggarwal/nodejs-rest-api/
$ npm install --save body-parser
与其他依赖项一样,我们必须使用require关键字将其导入以利用解析JSON请求的功能,如下所示:
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 ,让我们创建一个员工:
$ curl -H "Content-Type: application/json" -X POST -d '{"name": "Arpit Aggarwal","email":"aggarwalarpit.89@gmail.com"}' http://localhost:9999/employee/create
接下来,我们将扩展我们的应用程序以删除员工,并在server.js中定义DELETE映射,如下所示:
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!')
})
})
让我们验证一下DELETE调用:
curl -H "Content-Type: application/json" -X DELETE -d '{"name": "Arpit Aggarwal"}' http://localhost:9999/employee/delete
厌倦了每次对应用程序进行更改时都重新启动Node.js服务器?
如果是,我们可以使用Nodemon ,该实用程序将监视源中的任何更改并自动重新启动服务器。 让我们在全球范围内安装它:
$ npm install -g nodemon
安装后,我们必须使用nodemon而不是node来启动我们的应用程序,例如:
$ cd /Users/ArpitAggarwal/nodejs-rest-api/
$ nodemon server.js
完整的源代码托管在github上 。
翻译自: https://www.javacodegeeks.com/2016/12/writing-restful-service-using-node-express-mongodb.html