node.js - 我如何编写一个从 mongodb 查询的辅助函数,然后可以为任何 ejs 模板调用此函数

标签 node.js mongodb express mongodb-query ejs

我想写一个只有一个参数的函数 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/

相关文章:

ruby-on-rails - 使用windows平台开发RUBY项目可以吗?或者我应该改用 Linux?

javascript - fetch() 无法设置从服务器接收到的 cookie?

javascript - PUPPETEER - 无法使用 page.evaluate(() => document.querySelectorAll()) 提取某些网站上的元素

mongodb - 如何仅返回 mongo 对象数组中的一个字段而不删除对象的其余部分

mongodb - 将 MongoDB 数据从暂存服务器移动到生产服务器

node.js - Express.js 在路由之间传递 API 数据时遇到问题

javascript - 如何在 NodeJS 中处理用户个人资料的 get 方法?

node.js - 如何减少解析过程中的内存量

node.js - 架构:有效地计算和维护类似 Reddit 的网站中用户提交的分数

node.js - 哈巴狗 : TypeError: View is not a constructor