NodeJS无法为我的模板

时间:2017-03-12 20:11:55

标签: node.js mongoose templating nunjucks

我开始在NodeJS中开发一个小网站,使用基于https://github.com/DanialK/Simple-Authentication的管理员身份验证,它运行良好。

我可以创建一个用户,使用它登录并查看私人页面(仪表板)。 但是我的模板有问题(我使用的是Nunjucks),当管理员来到他的仪表板时,我只是想表示:

记录为:' admin_username'

这是我的代码:

型号:

const UserSchema = new mongoose.Schema({
  username: String,
  email: String,
  password: String,
  salt: String,
  hash: String
})

模型定义:

const User = mongoose.model('user', UserSchema)

我的路线:

router.route('/admin/dashboard', requiredAuthentication)
  .get((req, res) => {
    console.log("################ GET DASHBOARD ##################")
    requiredAuthentication(req, res, function() {
      User.find().then(user => {
        res.render('admin/dashboard.njk', {user: user})
        console.log(user)
      }).catch(err => {
        console.error(err)
    })
  })
})

所以我发送"用户",应该在我的模板中使用

{% extends "base/layout.njk" %}

{% block content %}
 admin:dashboard page <br /><br /><br />

 {% if sessionFlash.message %}
   <div class="{{ sessionFlash.type }}">
     {{ sessionFlash.message }}
   </div>
 {% endif %}

 You are logged as : {{ user.username }}

{% endblock %}

使用 user.username ,我无法获取用户名。 只有 user ,我才能从数据库,用户名,电子邮件,盐,哈希中获取整个文档。

这是来自路线的 console.log(用户)的结果:

[ { _id: 58c58ad8a5e54c00117ce85b,
username: 'test',
email: 'test',
salt: '/71BBVmr8E3b/HUz8L89IWLV7xM/vG9nvJRGzQYPw4dwR8GICr0kJtGs8dqwNzsMU7yki9aa2WM7C2NRxf/ausw+4kyiLojfugYzdrh+6obBq5HcZPZfQq+djwsTyyd+CDPJ/EmbUQyIL1yM7lRLfkhfrCIZ9P1mJZZM9fv4thw=',
hash: '��F\u0000\u000b ��a�\u001c|A˓P�N&��\u0010�5ajd�7{c �@�mQ����&��W�rW\'�+������\u0013����������N�4�y>/1��R\u001ca>���=U�u<9�T�o" \u000b�����Ʌ^�\u0004\u001f��\u0007�B`A�d���N@M$���',
__v: 0 } ]

不知道这是否重要,有两个用于身份验证的功能: requiredAuthentication authenticate

function authenticate(name, pass, fn) {
if (!module.parent) console.log('authenticating %s:%s', name, pass);

User.findOne({
    username: name
},

function (err, user) {
    if (user) {
        if (err) return fn(new Error('cannot find user'));
        hash(pass, user.salt, function (err, hash) {
            if (err) return fn(err);
            if (hash == user.hash) return fn(null, user);
            fn(new Error('invalid password'));
        });
    } else {
        return fn(new Error('cannot find user'));
    }
 });
}

function requiredAuthentication(req, res, next) {
  console.log("#### ->REQUIREDAUTHENTICATION() ####")
  if (req.session.user) {
    console.log("#### AUTH NEXT() ####")
    next();
  } else {
    console.log("#### AUTH DIE() ####")
    req.session.sessionFlash = {
      type: 'alert alert-success',
      message: 'You can't access the dashboard'
    }
    res.redirect('/admin/account/login');
  }
}

感谢您的帮助,如果您想了解更多信息,请问我。

1 个答案:

答案 0 :(得分:0)

看起来user对象实际上是一个包含1个项目的数组。您可以通过console.log输出中的前导[来判断。要解决此问题,您可以将user[0]传递到渲染功能,也可以在模板中添加for循环,以防您以后抓取多个用户。