首页 > 解决方案 > 如何使用 Nodejs 显示存储在 MongoDB 中的数据?

问题描述

这是我用来显示来自 MongoDB 的数据的代码。由于“结果未定义”而出现错误。我使用了 MongoDB 的 ID 来显示结果。但存储的数据不会显示在单独的页面上。

const express = require('express');
const app = express();
const ejs = require('ejs');
const assert = require('assert');
const bodyParser = require('body-parser');
const MongoClient = require('mongodb').MongoClient;
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.set('view engine','ejs');
app.set('')
var url = 'mongodb://localhost:27017';

app.get('/form',(req, res)=>{

res.render('form');

});

app.get('/data',(req, res)=>{

    MongoClient.connect(url, (err, db)=>{
        assert.equal(null, err);
        var dbo = db.db("form");
    var details = dbo.collection('usertable').find();
    details.forEach((data)=>{
        if(_id == 5b5ef0b8e0d9c23c2012cef2){

            result = item;
            return true;
        }
    })
    });
    res.render('customerdata',{item: result });
    });

我能够使用以下代码存储数据:

app.post('/form/submit', (req, res)=>{

    var item = {
        title: req.body.title,
        content: req.body.content,
        author: req.body.author
    };

    MongoClient.connect(url, (err, db)=>{
        assert.equal(null, err);
        var dbo = db.db("form");
        dbo.collection('usertable').insertOne(item, (err, result)=>{
            assert.equal(null, err);
            console.log('Inserted');
            db.close();
        });
    });
res.redirect('/form');
});

app.listen(8080);

标签: node.jsmongodb

解决方案


需要注意的几点:

  • MongoClient.connect() 是异步的,但您正在同步调用 res.render()。
  • 通常,您不想在每个请求时都启动与 MongoDB 的连接。
  • 您可能应该这样做dbo.collection('usertable').find().toArray(function(err, items) {...});来访问数据。

推荐阅读