0

我正在尝试将请求参数发送到 express.js、backbone.js 应用程序中的 mongodb 查找的“导出”方法。我很难将参数传递给 mongodb 并使用“#”。

破坏是将参数传递到导出的 mongodb 函数中。

这是数据流:

首先,请求被成功路由到“即将到来的”函数:

    "upcoming/uni/:uni" : "upcoming",

它毫无问题地流向“即将到来的”功能。

    upcoming: function(uni) {
    console.log("uni: "+uni);
    pag.reset();
    console.log("Hit upcoming list target");
    setCollectionType('upcoming');
        var upcomingCourses = buildCollection();

    // ------------------------------------------------------------------------
    // here is the problem how do I pass the parameter value through the fetch?
    // Although it may also have to do with '#' please read on.
    // ------------------------------------------------------------------------
        upcomingCourses.fetch({success: function(){
            $("#content").html(new ListView({model: upcomingCourses, page: 1}).el);
         }});
    this.headerView.selectMenuItem('home-menu');
},

mongo 方法的路由是:

app.get('/upcoming/uni/:uni', mongomod.findUpcoming);

所以下面的方法是从mongodb js文件中导出的,执行可靠。但是 req.params 没有通过。穿插在代码中,我已经描述了它的运行时行为:

exports.findUpcoming = function(req, res) {
    console.log("university", req.params.uni); // This consistently is unpopulated
    var uni = req.params.uni;
    console.log("Size: "+req.params.length); // This will always be 0
    for (var i=0; i < req.params.length; i++) {
        console.log("Parameters: "+req.params[i]);
    }

    db.collection('upcoming', function(err, collection) {

    if (typeof uni === 'undefined') {
        console.log("The value is undefined");
        uni = "Princeton University"; // here we add a string to test it it will work.
    }

    collection.find({university:uni}).toArray(function(err, items) {
        if (err) {
            console.log("Error: "+err);
        } else {
            console.log("No Error");
            console.log("Count: "+items.length);
            console.log(items[0]['university']);
            res.send(items);
        }
     });
  });
};

关于额外和重要的说明:

在工作的运行时环境中,该 url 将是:

http://localhost:3000/#upcoming/uni/Exploratorium

这个失败了,但是下面的 URL 可以通过这些函数传递参数,但是它将 JSON 返回到屏幕而不是呈现的版本:

http://localhost:3000/upcoming/uni/Exploratorium

问题可能是对 # 和模板的错误理解。请,如果您看到错误启蒙,将不胜感激。

4

2 回答 2

1

#传递给服务器后什么都没有。请参阅如何以服务器端语言获取哈希?https://stackoverflow.com/a/318581/711902

于 2013-10-21T20:28:17.887 回答
0

我找到了将参数从客户端传递到服务器端的问题的解决方案。通过更改集合的 url,参数将被传递到服务器端:

upcomingCourses.url = "/upcoming/uni/"+uni; // <-- here's the ticket where uni is param
    upcomingCourses.fetch({success: function(){
        $("#content").html(new ListView({model: upcomingCourses, page: 1}).el);
 }});

这可以做得更优雅,但它是一种将参数传递给服务器的方法。

谢谢

于 2013-10-22T15:19:07.923 回答