【问题标题】:How To Display Multiple Documents From Mongodb On HTML Using Node.js & Express如何使用 Node.js 和 Express 在 HTML 上显示来自 Mongodb 的多个文档
【发布时间】:2021-01-04 11:01:21
【问题描述】:

我正在尝试使用 node.js 和 express 在我的前端 html 上显示来自 mongodb 的多个文档。它基本上从我的 mongodb 获取文档,然后将其发送到 ejs 文件并循环执行代码,但我不知道我在这里做错了什么。请帮忙... 这是我的代码 sn-p...

var jobSchema = new mongoose.Schema({
    Company: String,
    Job_Title: String,
    Job_Description: String,
    Payment: String,
    Phone: String,
    Email: String
})

var Job = mongoose.model('Job', jobSchema, 'Jobs')

app.post("/seejobs", function (req, res) {
    
    Job.find().toArray(function(err, docs) {
        if(err) throw err;
        res.render('main', {'docs': docs});
    });
    
});

我的 ejs 看起来像......

<% for (var d=0 ; d < docs.length ; d++){%>

                <h1>Company : <%= docs[d].Company %></h1>
                <h1>Job Title : <%= docs[d].Job_Title %></h1>
                <h1>Job Description : <%= docs[d].Job_Description %></h1>
                <h1>Payment : <%= docs[d].Payment %></h1>
                <h1>Phone : <%= docs[d].Phone %></h1>
                <h1>Email : <%= docs[d].Email %></h1>

            <% } %>

这是我得到的错误......

TypeError: Job.find(...).toArray is not a function
    at C:\Users\Xander CaGe\Desktop\Projects\Joby\app.js:53:16
    at Layer.handle [as handle_request] (C:\Users\Xander CaGe\Desktop\Projects\Joby\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\Xander CaGe\Desktop\Projects\Joby\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\Xander CaGe\Desktop\Projects\Joby\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\Xander CaGe\Desktop\Projects\Joby\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\Xander CaGe\Desktop\Projects\Joby\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\Xander CaGe\Desktop\Projects\Joby\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\Xander CaGe\Desktop\Projects\Joby\node_modules\express\lib\router\index.js:275:10)
    at C:\Users\Xander CaGe\Desktop\Projects\Joby\node_modules\body-parser\lib\read.js:130:5
    at invokeCallback (C:\Users\Xander CaGe\Desktop\Projects\Joby\node_modules\raw-body\index.js:224:16)
    at done (C:\Users\Xander CaGe\Desktop\Projects\Joby\node_modules\raw-body\index.js:213:7)
    at IncomingMessage.onEnd (C:\Users\Xander CaGe\Desktop\Projects\Joby\node_modules\raw-body\index.js:273:7)
    at IncomingMessage.emit (events.js:333:22)
    at endReadableNT (_stream_readable.js:1201:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)

谁能帮助我的代码?

【问题讨论】:

  • i dont know what i am doing wrong 我们也不知道 :) 输出是什么?你看到发生了什么?有什么错误吗?碰撞?你得到一个空白页?任何事物?我们只能假设“某事”没有按预期发生,但是什么?据我所知,这段代码看起来还不错
  • 我已经添加了我得到的错误。
  • 我不明白我在这里做错了什么......
  • 啊啊,看到了吗?有了这个错误,马上就有人发现了。现在很明显了。

标签: javascript html node.js mongodb mongoose


【解决方案1】:

为了详细说明@PascalLamers 的答案,这里是 ES6/async/await 风格。添加.lean() 只获取纯 JSON 数据而不是 Mongoose 对象,这样更轻更快:

app.post("/seejobs", async (req, res) => {
    try{
        const docs = await Job.find({}).exec().lean();
        res.render('main', { 'docs': docs });
    } catch(err) {
        res.json(err);
    }
});

【讨论】:

    【解决方案2】:

    这应该为您完成这项工作。

        Job.find().then(function(err, docs) {
          if(err) throw err;
          res.render('main', {'docs': docs});
        });
    

    【讨论】:

      【解决方案3】:

      ...toArray 不是函数

      关于您看到的错误。 toArray 不是 Mongoose API 的一部分。因此Job.find().toArray 将不起作用。试试这个:

      
      Job.find({}).exec()
      .then((docs) => {
        // note 'docs' is already an Array of Documents
        res.render('main', {'docs': docs});
      })
      .catch((err) => {
        if(err) throw err;
      });
      
      

      见:https://mongoosejs.com/docs/api.html#model_Model.find

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-25
        • 1970-01-01
        • 1970-01-01
        • 2017-09-22
        • 2013-05-14
        • 2013-08-20
        • 2021-08-20
        • 1970-01-01
        相关资源
        最近更新 更多