【问题标题】:Node.js / REST: How to get _id from urlNode.js / REST:如何从 url 获取 _id
【发布时间】:2026-01-25 10:10:01
【问题描述】:

我已经关注下一个教程:http://cwbuecheler.com/web/tutorials/2014/restful-web-app-node-express-mongodb/ 几天后,我完成了所有工作,但更新用户数据库是为了读者自己。

我已经编辑了翡翠模板并为更新链接上的点击事件添加了一些 javascript。 我什至可以从列出的 testuser 中检索用户 ID。用警报对此进行了测试,一切正常。

点击事件的javascript:global.js

function showUser2Edit(event){
    event.preventDefault();

    var userID = $(this).attr('rel');
    // alert (userID);// _id from MongoDB, ok!

    // jQuery AJAX call for JSON
    $.getJSON( '/users/userdata/' + userID, function( data ) {
        // populate edit form
        alert (JSON.stringify(data));
    }
}  

在 users.js(服务器端 node.js)中

/*
 * GET userData
 */
router.get('/userdata', function(req, res) {
    var db = req.db;
    var collection = db.get('users');
        collection.find({_id: ?????? },{},function(e,docs){
        res.json(docs);
    });
});

2 个问题我真的不知道如何解决它们:

Ajax 调用将指向:users/userdata/_id(_id 是一个长字符串,由 MongoDB 自动添加为键)。但是如何将其添加到此路由器功能中?

这个_id必须放在collection.find(....)的where部分,但是如何从url中提取呢?

提前感谢您的帮助!

重复的标记不正确,那个是关于查询参数:?color=red,如何访问变量颜色?,mines 是一个 REST 系统,其中 id 是 url 本身的一部分。

【问题讨论】:

  • 这是一个“表达”问题,答案可在"request" 对象的文档中找到。事实上,这是页面上的第一个示例。
  • 让我在谷歌上帮你搜索一下.. :) 也是一个副本。
  • 那一个是关于一个get参数:?color=red,我怎样才能访问variabe颜色?我的问题是关于 REST 系统,所以没有参数
  • @Blakes:感谢您提供的链接。

标签: javascript node.js express


【解决方案1】:

你需要改变

router.get('/userdata'...

收件人:

router.get('/userdata/:id'...

:id - 它的参数。如果你在 node.js 中使用 body-parser 检查 req.body.params。

【讨论】:

  • 来吧,它是重复的。不要回答这样的问题,因为你似乎是那种只想要一些分数的人:)
  • 有时很难找到“简单”的解决方案。不是每个人都有出色的谷歌技能,有时你会在 50 多个示例之后陷入困境。有时重复标志设置得太快。我真的很尊重这个问答网站的规则,但有时它是在一个真正的“非常严格”的方式中。给个简单的答案没有错,这个真的很简单,但也让我大开眼界!我并不懒惰,花了 3 天时间来完成这个例子,让它运行和理解。有时,像我这样的人,到处搜索,但并不总是在正确的地方。这也是一个学习的过程!
  • 您从未打开过文档,或者您应该已经看过了。这与谷歌搜索技巧无关,而是首先尝试找到它。
  • @Terradon 通常设置重复标志是因为您自己没有找到它,并且有人试图通过将您指向一个已经存在的答案来“帮助”您。近距离投票不是侮辱,而是为了指导您或保护您免受其他人提交错误答案的影响。如果您的问题持续很长时间,通常会发生这种情况。感谢这位好人的帮助,而不是如此防御和冒犯。在这里查看事物的更好方法。重复的答案并没有什么问题(尽管我不希望这样),只要两者都得到承认。
  • 感谢您的解释,我没有冒犯的意图。当然,我对在这里获得的所有免费建议感到满意。由于我在此示例上花费的最后 3 天,一定很累:)。 .
【解决方案2】:

你改变了:

$.getJSON( '/users/userdata/' + userID, function( data ) {

收件人:

 $.getJSON( '/users/userdata/?id=' + userID, function( data ) {

并在节点中使用 - req.query.id。

【讨论】:

  • 这是一种可能的方式,但我不想在 url 中使用参数。