【问题标题】:Acces data from mongodb with nodejs使用 node js 从 mongodb 访问数据
【发布时间】:2020-02-21 19:42:18
【问题描述】:

我的应用程序的想法是在 mongodb 数据库中添加数据,并将数据作为列表从数据库获取到前端。

这是我的 index.js 文件:

const express = require('express');
const ejs = require('ejs')
const app = express();
const bodyParser = require('body-parser')
const MongoClient = require('mongodb').MongoClient;
app.set('view engine', 'ejs');


app.get('/', (req, res) => {
    res.render(`home.ejs`)
});

app.get('/form', (req, res) => {
    res.render(`form.ejs`)
});

///////////////////////////////////////////////
let jsonParser = bodyParser.json()
let urlencodedParser = bodyParser.urlencoded({extended: false})

const url = "mongodb://localhost:27017/test";
app.post('/', urlencodedParser, function (req, res) {
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        let dbo = db.db("test");

        const userName = req.body.firstName;
        const userLastName = req.body.lastName;
        console.log(userName);
        console.log(userLastName);
        res.render(`home.ejs`, {userName, userLastName});

        let myobj = {firstName: userName, lastName: userLastName};
        dbo.collection("users").insertOne(myobj, function (err, res) {
            if (err) throw err;
          else {
                dbo.collection('users').find().toArray(function(err, result) {
                    if (err) throw err;
                    const a = result.map(i => i.firstName);

                    console.log(a);
                    app.get('/blog', (req, res) => {
                        res.render(`blog.ejs`, {a})     // here i send data to my blog file
                    });
                    db.close();
                });
            }
            console.log("1 document inserted");
            db.close();
        });
    });

});

app.listen(9000, function () {
    console.log('node starts')
});

我要发送数据的文件是blog.ejs。如果我运行命令 node index.js 我将从 mongodb 获取数据,但是如果之后我将在我的 form 文件中添加一些新内容,即使数据将在数据库中发送,在前端它也不会更新,这是主要问题。

这是我的form.ejs 文件:

<form action="/" method="post">
    <input type="text" name="firstName">
    <input type="text" name="lastName">
    <button type="submit">SUBMIT DATA</button>
</form>
<a href="/">Back to Home</a>

这是我的blog.ejs 文件:

<div>
    <h1>Blog</h1>
    <%=a %>
    <a href="/form">Back to Form</a>
</div>

我的问题是: 1、我通过form.ejs发送东西后前端数据更新问题如何解决?

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    所以你已经混合了两个路由,所以首先,创建一个路由来渲染 home 并使用 get 方法形成表单。 (希望你有在 home.ejs 中形成的链接)

    app.get('/', function (req, res) {
        res.render(`home.ejs`);
    });
    
    app.get('/form', function (req, res) {
        res.render('form.ejs');
    });
    

    然后在 form.ejs 中将 action 更改为 "/form" 并使用 post 方法创建此路由。

    当您检索数据时,只需渲染 blog.ejs。

    app.post('/form', urlencodedParser, function(req, res) {
        MongoClient.connect(url, function(err, db) {
            if (err) res.render('404.ejs', err);
            let dbo = db.db('test');
    
            const userName = req.body.firstName;
            const userLastName = req.body.lastName;
    
            console.log(userName);
            console.log(userLastName);
    
            let myobj = { firstName: userName, lastName: userLastName };
            dbo.collection('users').insertOne(myobj, function(err, res) {
                if (err) res.render('404.ejs', err);
                dbo
                    .collection('users')
                    .find()
                    .toArray(function(err, result) {
                        if (err) res.render('404.ejs', err);
                        const a = result.map(i => i.firstName);
    
                        console.log(a);
                        res.render(`blog.ejs`, { a });
                        db.close();
                    });
            });
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 2018-10-01
      • 2021-02-06
      • 1970-01-01
      • 2017-10-07
      相关资源
      最近更新 更多