首页 > 解决方案 > 如何在 Express 和 MongoDB 中使用 async 和 await

问题描述

    const express = require('express');
    const bodyParser = require('body-parser');
    const cors = require('cors');
    const mongodb = require('mongodb');

    const app = express();
    app.use(cors())
    app.use(bodyParser.json());


    const MongoClient = mongodb.MongoClient;
    const url = "mongodb://localhost:27017/recart";


    app.post("/register" , (req, res) => {
        const { displayName, email, password } = req.body;
        if (!email || !displayName || !password) {
            return {code: 400, msg: "incorrect form submission"}
        }
        let insertedid = null
        MongoClient.connect(url, (err, db) => {
            if (err) throw err;
            var dbo = db.db("recart");
            var myobj = { displayName: displayName, email: email, password: password };
            dbo.collection("customers").insertOne(myobj)
            .then(res => {
                insertedid = res.insertedId
            })
        });
        res.json({id: insertedid})
    })

    app.listen(process.env.PORT || 3000, ()=> {
        console.log(`App is running on port 3000`);
    })

在这里,我将数据存储在 db 中,并将最后插入的 id 发送到前端。

但是,id返回 null。

我该如何使用asyncawait解决这个问题?

标签: express

解决方案


您可以使用以下方式修改您的 post 功能async await

app.post("/register", async (req, res) => {
     const { displayName, email, password } = req.body;
       if (!email || !displayName || !password) {
           return {code: 400, msg: "incorrect form submission"}
       }
       let insertedid = null ;
       MongoClient.connect(url,{ useNewUrlParser: true }, async (err, db) => {
           if (err) throw err;
           var dbo = db.db("recart");
           var myobj = { displayName: displayName, email: email, password: password };
           var result = await dbo.collection("customers").insertOne(myobj);
           insertedid = result.insertedId;
           res.json({ id:  insertedid})
     });
})

推荐阅读