【问题标题】:Url parameter in express and mongooseexpress 和 mongoose 中的 Url 参数
【发布时间】:2016-08-16 16:50:21
【问题描述】:

我正在使用 node/express 和 mongoose 构建一个基本的 Web 应用程序。如何将 express 参数中的 :id 替换为字符串

例如

猫鼬模型

var UserSchema = new Schema({
   name: String,
});

var User = mongoose.model('User', UserSchema);

假设现在用户的集合中有一个用户名"Mr robot king"

app.get('/:id', function(req, res, next) {
    User.findOne({ _id: req.params.id }, function(err, user) {
       res.render('home');
    });
});

url的结果

localhost:8080/5asdasd43241asdasdasd

我想要的是

localhost:8080/Mr-robot-king

【问题讨论】:

    标签: node.js express mongoose


    【解决方案1】:

    本质上,这不会太难:

    app.get('/:name', function(req, res, next) {
      var name = req.params.name.replace(/-/g, ' ');
      User.findOne({ name : name }, function(err, user) {
        res.json(user);
      });
    });
    

    一些注意事项:

    • 由于您的示例将空格替换为连字符,而上面的代码则相反,因此带有实际连字符的用户名将破坏此替换方案;
    • 如果允许用户名包含在 URL 中具有特殊含义的字符(如 &?),则在构建链接时,您应该对其进行编码。所以用户名jill&bob 将产生链接localhost:8080/jill%26bob
    • 您可能希望将index 添加到name 字段以确保查询速度快;

    编辑:要生成这些链接,例如从 EJS 模板,您可以使用如下内容:

    <a href="/<%= user.name.replace(/ /g, '-') %>">go to page</a>
    

    【讨论】:

    • 我做到了,但仍然显示百分比,GET /Mr%20Robot%20King%
    • 如果你看一下这个网页,网址有连字符,我不确定为什么 express 没有这个选项,它将多个字符串更改为连字符格式
    • @sinusGob 如果链接显示百分比,这意味着您在创建链接时实际上并没有用连字符替换空格。但这超出了这个问题的范围,因为它取决于您如何创建 HTML。 Express 与 HTML 中的链接外观无关,您必须自己构建此类功能。
    • 所以在技术上,在我将 Mr robot king 保存到数据库之前,我必须添加连字符,以便它可以存储 Mr-robot-king?
    • @sinusGob 否。当在 HTML 中生成指向 localhost:8080/user-name 的链接时,您需要将空格替换为连字符。但是,这完全取决于如何您生成 HTML。
    猜你喜欢
    • 2013-02-22
    • 2023-02-05
    • 2018-01-15
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 2014-03-17
    相关资源
    最近更新 更多