使用Node,Express和MongoDB编写RESTful服务

考虑到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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值