Nodejs Rest API 与 mongoose 和 mongoDB

Posted

技术标签:

【中文标题】Nodejs Rest API 与 mongoose 和 mongoDB【英文标题】:Nodejs Rest API with mongoose and mongoDB 【发布时间】:2016-09-23 08:42:54 【问题描述】:

我在nodejs上有这个rest API如下

 router.route('/api/Customers')          
    .post(function(req, res)         
        var Customer = new Customer();
        Customer.name = req.body.name;

        Customer.save(function(err) 
            if (err)
                res.send(err);
            res.json( message: 'Customer created!' );
        );
  )
    .get(function(req, res) 
        Customer.find(function(err, Customers) 
            if (err)
                res.send(err);

            res.json(Customers);
        );
  );

  router.route('/api/Customers/:Customer_id')    
    .get(function(req, res) 
        Customer.findById(req.params.Customer_id, function(err, Customer) 
            if (err)
                res.send(err);
            res.json(Customer);
        );
    )

    .put(function(req, res) 
        Customer.findById(req.params.Customer_id, function(err, Customer) 
            if (err)
                res.send(err);
            Customer.name = req.body.name;  
            Customer.save(function(err) 
                if (err)
                    res.send(err);
                res.json( message: 'Customer updated!' );
            );
        );
    )

    .delete(function(req, res) 
        Customer.remove(
            _id: req.params.Customer_id
        , function(err, Customer) 
            if (err)
                res.send(err);

            res.json( message: 'Successfully deleted' );
        );
);

如何为特定字段创建端点?例如,如果我想获取 CustomerName、CustomerZip 等的结果。我是否必须为每个字段创建单独的端点?

【问题讨论】:

你真的有两个选择。 1. 让一个端点返回多个字段。 2. 让单独的端点返回单独的字段。您的响应对象可以发送您希望从数据库发送的任何数据,因此您可以决定希望每个端点返回什么(1 个字段、多个字段或根本没有字段) 【参考方案1】:

您是否使用 express.js 作为框架?在这种情况下,您可以在路由中添加可选参数,例如:

router.route('/api/Customers/:Customer_id?')          
    .post(function(req, res)         
...
  )
    .get(function(req, res) 
...
  );
);

这样:Customer_id 将是可选的,您可以在路由中管理逻辑。

这是一个工作示例:

app.route('/test/:param1?/:param2?')
    .get( function(req, res, next) 

        res.json(
            'param1' : req.params.param1,
            'param2' : req.params.param2
        );

    );

app.listen(8080);

这条路线支持:

/测试 /test/1 /test/1/2

在响应中你可以看到这个参数的值,我不知道如何只通过 param2 而没有 param1。

【讨论】:

如何在这里放置多个参数?在调用端点时,我应该为可选参数传递空值吗? 我添加了一个工作示例,希望我回答了你的问题

以上是关于Nodejs Rest API 与 mongoose 和 mongoDB的主要内容,如果未能解决你的问题,请参考以下文章

Node js App 与 power bi rest Api 的集成

在nodejs中使用rest auth api

NodeJS REST API with MySQL and Express

Nodejs:如何从 REST API 下载 pdf 文件?

nodejs使用Node.js实现REST Client调用REST API

[转]nodeJs--koa2 REST API