【问题标题】:output to jade the appropriate value from an object sent from express从 express 发送的对象中将适当的值输出到玉
【发布时间】:2016-05-21 06:45:56
【问题描述】:

我试图弄清楚当用户访问"/users/:name" 时如何在页面上检索适当的信息。我想要做的是打印出“欢迎 user2”,如果 user2 已登录,其他用户也一样。我想这样做的方法是从"/users/:name" 传递参数并检查参数是否等于username 值打印出该值。(不确定这是否是一种安全的方法)如何我是否循环浏览我的特定对象列表并将其与参数进行比较?

我把这个发送到我的玉文件中

{ list: 'userList', users: [ { password: 'pass1', username: 'user1' }, { username: 'user2', password: 'pass2' }, { username: 'user3', password: 'pass3' } ], address: '14459 70 th st city NY', desc: '3 floors', __v: 0, _id: 56baf181356641f01213295a }

因为我这样做,所以发送了这个:

app.get("/users/:name", function(req, res){
    // console.log(req.params.name)
    User.findOne({"users" : { $elemMatch: { username : req.params.name}}}, function(err, doc){
        console.log("test ", doc)
        res.render("users", {result : doc, name : req.params.name});
    })

})

玉:

html
    head
    body
        p= result
        p Welcome #{result.users[0].username} #{name} // prints out--> Welcome user1 user2 ||| when user2 signs in
        p= result.address
        h3= result.desc
        a(href="/logout") logout

【问题讨论】:

  • 基本上你有一个对象,每次result.users[0].username的第一个用户名总是等于user1。所以问题是你想在这里实现什么授权检查?
  • 我已经授权了。用户可以使用 users 数组中的任何用户名和密码组合登录(他们可以查看和更改相同的数据)。现在我只想为登录的用户打印一条欢迎消息。我知道result.users[0].username 只是查看第一个对象。我只想从这些对象中检索正确的用户名。我认为这对我来说是一个很好的迭代练习。不确定是否使用 each 或 for 循环
  • 我想将name 与对象中的用户名进行比较并打印出用户名值,但存在三个对象。我可以通过插入 name 来打印出用户名,但我想从对象中获取它。
  • 当然,请参阅下面的答案。可以从玉标记中的user 变量中获取所有适当的数据。

标签: javascript express mongoose iteration pug


【解决方案1】:

那么您可能想要这样做,为给定的参数输入选择合适的用户对象:

app.get("/users/:name", function(req, res){
    // console.log(req.params.name)
    User.findOne({"users" : { $elemMatch: { username : req.params.name}}}, function(err, doc){
        console.log("test ", doc)
        var users = result.users;
        var currentUser = {};

        for(var i=0;i<users.length;i++)
          if(users[i].username === req.params.name)
            currentUser = users[i];
        res.render("users", {result : doc, user : currentUser });
    });
})

【讨论】:

  • 谢谢,我稍后再检查一下,我现在必须去某个地方。感谢您的回答。我正在考虑在翡翠文件中进行一些迭代,但您在路由请求中进行了。没关系,但是因为我想用翡翠做它,如果你也能展示如何在那里做,那将非常有帮助。我一定会尽快接受你的回答。
  • 如果您想在 Jade 中这样做,请务必使用此表示法,但无论如何我不会将所有用户数据暴露给布局。 jade-lang.com/reference/iteration
猜你喜欢
  • 2013-12-27
  • 2015-05-16
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
相关资源
最近更新 更多