如何使用nodejs RESTful api从多个集合中查询?

时间:2017-12-05 19:00:02

标签: node.js rest api

nodejs noobie here,

我创建了nodejs RESTful api,用于从三个不同的集合中获取数据。这篇文章帮助了我nodejs api in 10 minutes

创建API后,我可以通过邮递员点击API并获取数据。现在,我希望继续下一步查询来自多个集合的记录

Server.js

    var express = require('express'),
  app = express(),

  port = process.env.PORT ||3000,
  mongoose = require('mongoose'),
  menu = require('./app/api/bestseller_books/models/bestsellerBooksModel'),
    admin = require('./app/api/admin/models/adminModel'),
    test = require('./app/api/test/models/testModel'),
  bodyParser = require('body-parser');
  var Schema = mongoose.Schema;
  var cors = require('cors');


// mongoose instance connection url connection
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost:27017/takebook', { useMongoClient: true }); 
/*mongoose.model('menu', new Schema({ title: String, id: Number }));*/

var menu = mongoose.model('bestseller_books');
var test = mongoose.model('test');
var admin = mongoose.model('admin');
var routes = require('./app/api/bestseller_books/routes/bestsellerBooksRoutes'); 
var routes2 = require('./app/api/admin/routes/adminRoutes');
var routes3 = require('./app/api/test/routes/testRoutes');


menu.find({}, function(err, data) { console.log(err, data.length); });


app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cors());

routes(app); //register the route
/*routes2(app);
routes3(app);*/


app.listen(port);
app.use(function(req, res) {
  res.status(404).send({url: req.originalUrl + ' not found'})
});

console.log('RESTful API server started on: ' + port);

畅销书籍控制器

'use strict';

var mongoose = require('mongoose'),
  menu = mongoose.model('bestseller_books');

exports.list_all_menus = function(req, res) {
  menu.find({}, function(err, menu) {
    if (err)
      res.send(err);
    res.json(menu);
    console.log(res);
  });
};

exports.create_a_menu = function(req, res) {
  var new_menu = new menu(req.body);
  new_menu.save(function(err, menu) {
    if (err)
      res.send(err);
    res.json(menu);
  });
};


exports.read_a_menu = function(req, res) {
  menu.findById(req.params.menuId, function(err, menu) {
    if (err)
      res.send(err);
    res.json(menu);
  });
};


exports.update_a_menu = function(req, res) {
  menu.findOneAndUpdate({_id: req.params.menuId}, req.body, {new: true}, function(err, menu) {
    if (err)
      res.send(err);
    res.json(menu);
  });
};


exports.delete_a_menu = function(req, res) {
  menu.remove({
    _id: req.params.menuId
  }, function(err, menu) {
    if (err)
      res.send(err);
    res.json({ message: 'bestseller_books successfully deleted' });
  });
};

我的问题是:

  1. 我是否必须为其创建新的模型,控制器和路线 每个API?
  2. 查看server.js,这是最好的做法 设置API路线?
  3. create_a_menu方法的用途是什么? 在API控制器中提到,如果我必须以这种格式命中API:

    app.controller('booklister', ['$http', function($http) {
    var self = this;
    $http.get('http://localhost:3000/bestseller_books')
    .then(function(response) 
    {
          /*$('.fa-refresh').hide();*/
          self.items = response.data;
        }, function(errResponse) {
          /*$('.fa-refresh').show();*/
          console.error('Service Error while fetching books' + errResponse);
        });
    

1 个答案:

答案 0 :(得分:0)

从一切创造更多。 新模型,新模式,新B1层,新路线,照顾新的集合。

例如:

在yore dotsModel.js:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

    var DotsSchema = new Schema({

    x: {
        type: Number
    },
    y: {
        type: Number
    }
});

module.exports = mongoose.model('Dots', DotsSchema);

你的dotsController.js:

var mongoose = require('mongoose'),
    Dots = mongoose.model('Dots')

exports.get_all_dots = function (req, res) {
    Dots.find({}, function (err, task) {
        if (err)
            res.send(err);
        res.json(task);
    });
};

并在你的dotsRou​​tes.js:

module.exports = function(app) {
    var todoList = require('../controllers/ dotsController.js:');

app.route('/dots')
    .get(todoList.get_all_dots);

注意:

您阅读的文章很简短,他简要介绍了每个主题,强烈建议您再学习另一门课程,并花时间学习应用程序的每个部分,以及能够实现的节点。