在URL中传递参数后,如何使用nodejs从mongodb获取和显示数据?

时间:2018-07-31 13:11:20

标签: node.js mongodb express parameters

在URL中传递参数后,我只想在用户使用参数输入URL时显示Mongodb中的数据。

例如,如果URL为“ http://www.example.com/product/1”,则应检索属于id值“ 1”的数据并将其显示在前端。

我已经编写了用于基于id显示数据的代码,但是由于存在一些我无法发现的错误,因此没有显示结果。

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


app.get('/product/:id', (req, res) => {
    var data = [
        {
            id: 1,

        },
        {
            id: 2,

        }
    ]
    data.forEach((product) => {

        if (product.id == req.params.id) {


            MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {

                if (err) throw err;
                var dbo = db.db('product')
                var cursor = dbo.collection('details').find();
                cursor.forEach((doc, err) => {
                    if (err) throw err;
                    data.push('doc');
                }, () => {
                    db.close();

                });
            });
            return true;

        }

    })
    res.render('productdetails',{title:"Product Details", product: data});

});

并且html部分是

<h3><%= data.producttitle %></h3>

1 个答案:

答案 0 :(得分:0)

问题1-Find方法是and async方法,这意味着您必须等待结果(使用wait或then)

问题2-您将字符串推入数据数组,而不是数据本身。 您还可以避免使用其他数组

问题3-您没有为查找指定任何过滤器

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


app.get('/product/:id', (req, res) => {
    MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {
    if (err) throw err;
    var dbo = db.db('product')
    dbo.collection('details').find({id : id}).toArray().then(products => {
    res.render('productdetails',{title:"Product Details", product: products[0]});}).catch(err => {throw err;});
});