我想写一个只有一个参数的函数 id
让这个 mongo 传递给我的 home.ejs
.
此查询的示例:
db.getCollection('users').find('5da85558886aee13e4e7f044', {image: 1})
示例我有一条路线。
路由/user.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
我可以打电话 getUserimage('5da85558886aee13e4e7f044')
ids
列表的内部循环
View /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
它给了我正确的结果。但是当我像这样调用 view.ejs <%=getUserImage("5d999578aeb073247de4bd6e")%>
将其归档给我[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 文件位于同一目录中。
关于node.js - 我如何编写一个从 mongodb 查询的辅助函数,然后可以为任何 ejs 模板调用此函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58577039/