Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在HBS模板中仅打印当前用户_Node.js_Express_Mongoose_Handlebars.js_Passport.js - Fatal编程技术网

Node.js 如何在HBS模板中仅打印当前用户

Node.js 如何在HBS模板中仅打印当前用户,node.js,express,mongoose,handlebars.js,passport.js,Node.js,Express,Mongoose,Handlebars.js,Passport.js,我想通过从数据库中获取用户名来打印当前登录的用户 在我的模型中,username属性包含以下架构: { type: String, required: true } index.js: const users = require('../model/db'); router.get('/profiles/instructor', function (req, res, next) { users.find({}, 'username', (err, doc)=>{

我想通过从数据库中获取用户名来打印当前登录的用户

在我的模型中,username属性包含以下架构:

{
  type: String, 
  required: true
}
index.js:

const users = require('../model/db');
router.get('/profiles/instructor', function (req, res, next) {
  users.find({}, 'username', (err, doc)=>{

    if(err){
      console.log('err while finding on instructor at index.js => ' + err)
    }else{
      console.log(doc)
      res.render('./profiles/instructor', { 
        title: 'Courstak | Instructor Profile',
        name: doc
// etc......
})
<h5>{{name}}</h5>
ex.hbs:

const users = require('../model/db');
router.get('/profiles/instructor', function (req, res, next) {
  users.find({}, 'username', (err, doc)=>{

    if(err){
      console.log('err while finding on instructor at index.js => ' + err)
    }else{
      console.log(doc)
      res.render('./profiles/instructor', { 
        title: 'Courstak | Instructor Profile',
        name: doc
// etc......
})
<h5>{{name}}</h5>
{{name}
我遇到的问题是,当我打开我的网站时,它会显示数据库中的所有用户,而不仅仅是当前登录的用户:

错误屏幕截图:

const users = require('../model/db');
router.get('/profiles/instructor', function (req, res, next) {
  users.find({}, 'username', (err, doc)=>{

    if(err){
      console.log('err while finding on instructor at index.js => ' + err)
    }else{
      console.log(doc)
      res.render('./profiles/instructor', { 
        title: 'Courstak | Instructor Profile',
        name: doc
// etc......
})
<h5>{{name}}</h5>

您在OP的评论中提到您正在使用
passport local
策略,并且它似乎以您期望的方式与
express
非常好地连接,因此
req.user
应该拥有您要查找的信息,这将使您的代码如下所示:

router.get('/profiles/讲师',函数(req、res、next){
res.render('./配置文件/讲师',{
标题:“Courtak |讲师简介”,
名称:req.user.username
});
});
我还建议使用一些中间件,如
connect-sure-login
,以确保用户已登录并拥有有效的会话。您可以这样添加上面的中间件:

var connectEnsureLogin=require('connect-sure-login')
router.get('/profiles/讲师',connectEnsureLogin.ensureLoggedIn(),函数(req,res,next){
// ...
}

这么多缺失的信息很难帮助你。用户如何登录?会话信息存储在哪里?如果没有某种登录机制/会话信息,你的应用程序如何知道需要显示哪个用户?简短的回答是:显示所有用户是因为你在查询所有用户,而不是以任何方式进行过滤。
users.find({},'username',(err,doc)=>{
运行以下查询将返回每个文档,其中只有username字段:
users.find({},用户名,
,这会将所有数据传递到模板:
名称:doc
,这就是显示每个用户的原因。使用passport local strategyI false sessionI创建的登录尝试添加
req.user
,但它不处理任何其他操作,如
“/”
它只处理passport的
“/login”
操作ort在itIt中经过身份验证听起来您可能没有正确使用passport.js-您是否已将其与代码交叉引用?您很可能缺少一个
app.use(passport.session())<代码>电话,但我不知道你所提供的代码。非常感谢,这个链接帮助我感谢你花了我10个小时的误会,为什么代码不起作用!如果这个答案对你有帮助,那么你可以考虑把这个答案标记为被接受。