Javascript 具有路由的可变返回的函数

Javascript 具有路由的可变返回的函数,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我有多条路由需要来自数据库的相同用户数据。我有一个函数来检查用户是否登录,但该函数不返回用户变量 路线: app.get('/template', isAuthenticated, function (req, res) { MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => { if (err) throw err; const d

我有多条路由需要来自数据库的相同用户数据。我有一个函数来检查用户是否登录,但该函数不返回用户变量

路线:

app.get('/template', isAuthenticated, function (req, res) {
  MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => {
    if (err) throw err;
    const db = client.db(dbname);
    let collection = db.collection('users');
  // find data in db
  collection.findOne({ _id: userid }).then(user => {
    if (user != null) {
      res.render('template', { layout: 'temaplte', csrfToken: req.csrfToken(), username: user.username, avatar: user.picture });
    } else {
      console.log("No user with this id!")
    }
  }).catch((err) => { console.log(err);
  }).finally(() => { client.close(); });
});
});

是否有一种方法可以从数据库中获取变量
用户
,比如
isAuthenticated
?我是否需要在每个路由上编写
findOne函数

在路由中重用逻辑的最佳方法是将该功能重构到自己的中间件中

函数loadUserData(req、res、next){
MongoClient.connect(url{
useNewUrlParser:true,
useUnifiedTopology:正确
},(错误,客户端)=>{
如果(错误){
返回下一个(错误)
};
const db=client.db(dbname);
let collection=db.collection(“用户”);
//在数据库中查找数据
收藏,芬顿({
_id:userid
})。然后(用户=>{
如果(用户!=null){
req.user=user;//用用户数据扩充请求对象(也检查res.docs)
return next();//将控制传递给下一个中间件
}否则{
res.end(“没有具有此id的用户!”);
}
}).catch((错误)=>{
返回下一个(错误);
})
.最后(()=>{
client.close();
});
});
}
app.get('/template',已验证,loadUserData,函数(req,res){
const user=req.user;//loadUserData填充的req.user;
res.render('模板'{
布局:“Temapte”,
csrfToken:req.csrfToken(),
用户名:user.username,
化身:user.picture
});
});