为什么我在下面的代码中无法读取未定义的属性(读取"集合")?



我是mongodb和dev-web的新手,我在这个项目中使用mongodb与nodejs,我遇到了这个问题"无法读取未定义的属性(正在读取"collection"("当我发送请求时,在邮递员上,但在VS中,它连接到数据库没有任何问题。有人能帮我吗?这是我的代码

这是我的connection.js,当我悬停在collection和db上时,它在可视化代码中表示它是未定义的

const {MongoClient} = require('mongodb');
const {dbURL, dbName} = require('../config');

const client = new MongoClient(dbURL, {
useUnifiedTopology: true,
useNewUrlParser:true
});
function Connect(){
return new Promise(async(resolve, reject) =>{
try {
await client.connect();
const db = client.**db**(dbName);
const users = db.**collection**('users');
users.createIndex({email: 1},{unique: 1});
resolve(db, client);

}catch(error){
reject(error);

}
});

};
module.exports = Connect;

我希望有人能在这里找到解决办法这是我的index.js

const Connect = require('./connection');
const {port} = require('../config');
const app = require('./app');

Connect().then(({db}) => {
app.setupRoutes(db);
console.log('The database is connected');
}).catch((e) => {
console.error("couldn't connect to database", e);
});
app.listen(port, () => console.log(`App listening on port ${port}!`));
module.exports = app;

那是我的应用程序.js正如你所看到的,我在这里使用数据库收集

const express = require("express");
const cors = require("cors");
const ValidationError = require('./errors/ValidationError');
const app = express();
app.use(cors());
app.use(express.json());
const handleNewUser = (user, db) => {
return new Promise(async(resolve, reject)=>{
try {
const users = db.collection('users');
const results = await users.insertOne(user);
resolve(results.insertedId); 
}catch (error){
reject(error);

}

})

};
app.setupRoutes = (db) => {
app.post('/users',async (req, res) =>{
const user = req.body;

try {
const errors = validateUser(user);
if(errors.length > 0) throw new ValidationError(errors, 'Validation Error');
const results = await handleNewUser(user, db);
res.status(201).send(results);

}catch (error){
if(error instanceof ValidationError)
res.status(500).send({message:error.message,errors:error.errors});
else if(error.message.startsWith('E11000 duplicate'))
res.status(500).send('duplicate email.');
else res.status(500).send(error.message);
}

});
}
module.exports = app;

我不知道怎么了,我在跟着一个辅导

resolve(db, client)-您解析的不是对象而是单独的值"db";以及";客户">
Connect().then(({db}) => {-试图破坏第一个解析值的"db"属性;db";值不是对象或没有.db属性,它将始终未定义。

因此,删除析构函数,只使用值:

Connect().then((db) => {

最新更新