Javascript Node Express Rest API中的不同Get方法

Javascript Node Express Rest API中的不同Get方法,javascript,angularjs,node.js,express,mean-stack,Javascript,Angularjs,Node.js,Express,Mean Stack,我一直在用Mean stack创建一个网站,我在某个点上卡住了。我有一个MongoDB数据库,目前我正在使用RESTAPI从数据库中获取每个文件(在主页上显示它们),RESTAPI是用Express构建的 Server.js var express = require('express'); var app = express(); var mongojs = require('mongojs'); var db = mongojs('mongodb://username...', ['myAp

我一直在用Mean stack创建一个网站,我在某个点上卡住了。我有一个MongoDB数据库,目前我正在使用RESTAPI从数据库中获取每个文件(在主页上显示它们),RESTAPI是用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');
有两种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文件的搜索。如何在我的平均堆栈应用程序中使用不同的get方法

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

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

你想要的是不可能的。不知何故,您需要区分您的两个意图,或者给端点指定不同的名称(如您在评论中已经建议的),或者提供一个查询参数,以便执行如下调用:

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

正如@malix所指出的,试着改变他们的顺序,试着修改顺序。像
'/myapp/foo'
这样的请求将触发第一个
/myapp
路由处理程序,而不是第二个。@AshleyB修改订单意味着什么?如果你不介意的话,你能提供一个代码片段或者解释更多细节吗。你是想说在像;'这样的方法中使用不同的名称吗/myApp/GetAll'和'/myApp/Limit2'?