如何编写一个从mongodb查询的助手函数,然后可以为任何ejs模板调用该函数



我想写一个带有一个参数id的函数,让这个mongo传递给我的home.ejs

此查询的示例:

db.getCollection('users').find('5da85558886aee13e4e7f044', {image: 1})

示例我有一条路线。

路由/users.js

var User = require("../models/user");
var db = require("../secure/db");
var middleware = require("../middlewares/middleware");
//...
router.get("/home", middleware.isAllowed, function(req, res, next) {
res.render('home',{
title: "Project",
userList: userList,
getUserimage: getUserimage(??)//trying here 
})
});

所以在home.ejs或任何file.ejs中我可以在ids列表的循环内像getUserimage('5da85558886aee13e4e7f044')一样调用

views/home.ejs

<% layout('layout/layout') %>
//more code
<% for(var i=0; i < userList.length; i++){ %>
<div>
<img src ="<%=getUserimage(userList[i].id)%>" > <%=userList[i].name%> 
</div>
<% } %>
//more code

这是我更新的助手

var User = require("../models/user");
var ObjectId = require('mongodb').ObjectID;
module.exports.getUserImage = async function getUserImage(id) {
let result = await  User.find(ObjectId(id), {image: 1, _id: 0}).lean();
console.log(result[0].image);
return result[0].image; //or whatever you wanna return 
};

当我console.log时,它给了我正确的结果。但是当我调用像这个<%=getUserImage("5d999578aeb073247de4bd6e")%>文件这样的view.ejs时,它会给我[object Promise]

创建一个文件,我们将其命名为helper.js.

module.exports.getUserimage = async function(id){
//do something
//replace this with your own code but use the await
let result = await collection.findOne(query);
return result; //or whatever you wanna return 

}

然后在app.js中,你可以进行

const helper = require("helper");
app.locals.getUserimage = helper.getUserimage

然后,您可以像现在这样在.ejs模板中调用它。

<% layout('layout/layout') %>
//more code
<% for(var i=0; i < userList.length; i++){ %>
<div>
<img src ="<%= getUserimage(userList[i].id)%>" > <%=userList[i].name%> 
</div>
<% } %>
//more code

app.locals属性在应用程序的整个生命周期中都保持不变。提供helper.js文件的完整路径。我假设它与app.js文件位于同一目录中。

最新更新