首页 > 解决方案 > 在URL中传递参数后如何使用nodejs从mongodb获取和显示数据?

问题描述

在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>

标签: node.jsmongodbexpressparameters

解决方案


问题 1 - Find 方法是和异步方法,这意味着您必须等待结果(使用等待或然后)

问题 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;});
});

推荐阅读