TypeError:无法读取null的属性“ db”

时间:2020-01-01 21:49:13

标签: node.js mongodb

我在连接到mongodb地图集时遇到问题,出现以下错误

let express = require('express')
let mongodb = require('mongodb')
let app = express()
let db

let connectionString = 'mongodb+srv://olumide:xxxxxxxx@cluster0-edskm.mongodb.net/todoApp?retryWrites=true&w=majority'
mongodb.connect(connectionString, {useNewUrlParser: true, useUnifiedTopology: true}, function(err, client){
    db = client.db()
    app.listen(3000)
})

app.use(express.urlencoded({extended: false}))

app.post('/create-item', function(req,res){
   db.collection('item').insertOne({text: req.body.item}, function(){
    res.send("thanks for submitting the form")
   })

})

Error message

1 个答案:

答案 0 :(得分:1)

这是因为mongo.connect函数是异步的。您需要在mongo.connect回调中包含app.post函数。

类似的东西应该可以工作:

let express = require('express')
let mongodb = require('mongodb')
let app = express()

app.use(express.urlencoded({extended: false}))

let connectionString = 'mongodb+srv://olumide:xxxxxxxx@cluster0-edskm.mongodb.net/todoApp?retryWrites=true&w=majority'
mongodb.connect(connectionString, {useNewUrlParser: true, useUnifiedTopology: true}, function(err, client){
    const db = client.db()

    app.post('/create-item', function(req,res){
       db.collection('item').insertOne({text: req.body.item}, function(){
        res.send("thanks for submitting the form")
       })
    })

    app.listen(3000)
})