Node-Express Rest API

时间:2016-03-14 20:13:29

标签: javascript angularjs node.js express mean-stack

我一直在用Mean堆栈创建一个网站,而且我在某个时候陷入困境。我有一个mongo数据库数据库,我目前从数据库中获取每个文件(在主页面上显示),我的Rest Api是用Express构建的。

Server.js

var express = require('express');
var app = express();
var mongojs = require('mongojs');
var db = mongojs('mongodb://username...', ['myApp']);
var bodyParser = require('body-parser');

app.use(express.static(__dirname + '/public'));
app.use(bodyParser.json());

app.get('/myApp', function (req, res) {
    db.myApp.find(function (err, docs) {
        console.log(docs);
        res.json(docs);
    });
});

app.get('/myApp/:id', function (req, res) {
    var id = req.params.id;
    console.log(id);
    db.myApp.findOne({_id: mongojs.ObjectId(id)}, function (err, doc) {
        res.json(doc);
    })
});

app.listen(3001);
console.log('Server running on port 3001');

有2个get方法,我可以理解,因为它们有不同的参数。因此,当我从控制器调用它们时,没有问题,因为如果我提供id,它将调用第二个get方法。但是,例如我想在我的网站上使用这样的东西;

app.get('/myApp', function (req, res) {
    db.myApp.find({}).limit(2).skip(0, function(err, docs) {
        console.log(docs);
        res.json(docs);
    });
});

此get方法没有像server.js中的第一个get方法那样的参数,但它们执行不同的工作。这限制了我的搜索2文件。如何在我的Mean Stack应用程序中使用这样的不同get方法?

这是我从主控制器调用get方法的代码。如何确保调用特定的get方法?感谢..

$http.get('/myApp').success(function(response) { .. });

1 个答案:

答案 0 :(得分:1)

你想要的是不可能的。不知何故,您需要区分您的2个意图,或者通过给端点提供不同的名称(就像您在评论中已经建议的那样),或者提供例如查询参数,这样您就可以进行如下调用:

$http.get('/myApp?limit=2').success(function(response) { .. });

省略限制时,您可以返回所有结果。

类似的东西:

app.get('/myApp', function (req, res) {
   var limit = req.query.limit;
   if (limit === undefined) {
      // Return everything
   } else {
      // make sure limit is some valid number
      // ... and do a mongo query limited to this number
   }
});