简体   繁体   中英

Nodejs Rest API with mongoose and mongoDB

I have this rest API on nodejs as follows

 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' });
        });
});

How can I create endpoints for specific fields ? For example if I want to GET results for CustomerName, CustomerZip, etc .. Do I have to create separate end points for each field?

Are you using express.js as framework? In this case you can put optional params in your route, for example:

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

in this way :Customer_id will be optional and you can manage logic inside your route.

This is a working example:

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

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

    });

app.listen(8080);

this route supports:

  • /test
  • /test/1
  • /test/1/2

inside response you can see value of this params, I don't know how pass only param2 without param1.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM