Node.js 如何在HBS模板中仅打印当前用户
我想通过从数据库中获取用户名来打印当前登录的用户 在我的模型中,username属性包含以下架构: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)=>{
{
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个小时的误会,为什么代码不起作用!如果这个答案对你有帮助,那么你可以考虑把这个答案标记为被接受。