我创建了一个普通的堆栈应用程序。 正在将数据从angular传递到节点js。 在节点js中,一切正常,并获得插入成功消息。但是在数据库中找不到数据
节点index.js
// require('./app/route/dart.route.js')(app);
var mongoose = require('mongoose');
// make a connection
mongoose.connect('mongodb://localhost:27017/dart', { useNewUrlParser: true });
// get reference to database
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
console.log("Connection Successful!");
})
app.post('/dart_create', function (req, res) {
console.log('Request body output '
+ JSON.stringify(req.body));
try {
db.collection("darts").insertMany(req.body);
console.log("Data inserted successfully");
} catch (e) {
console.log(e);
}
});
节点控制台
角度浏览器控制台
请帮助我调试问题。我的数据哪里去了......
答案 0 :(得分:0)
在MongoDB中添加数据是一个异步过程,请使用.then
或使用async/await
使用async/await
app.post('/dart_create', async function (req, res) {
try {
const result = await db.collection("darts").insertMany(req.body);
console.log("Result", result);
console.log("Data inserted successfully");
return result;
} catch (e) {
console.log(e);
return e;
}
});
插入许多返回响应,例如插入成功后
{
"acknowledged" : true,
"insertedIds" : []
}
检查是否插入了insertedIds
的可验证长度和全部长度。
答案 1 :(得分:0)
您对MongoDB的插入操作失败,但是您的try and catch块未捕获错误,因为插入操作是异步操作。
因此,基本上,有两种方法可以解决此问题:
使用async/wait
app.post('/dart_create', async function (req, res) {
console.log('Request body output '
+ JSON.stringify(req.body));
try {
await db.collection("darts").insertMany(req.body);
console.log("Data inserted successfully");
} catch (e) {
console.log(e);
}
});
为then
使用promises
语法:
app.post('/dart_create', function (req, res) {
console.log('Request body output '
+ JSON.stringify(req.body));
db
.collection("darts")
.insertMany(req.body)
.then(() => {
console.log("Data inserted successfully");
})
.catch(e => {
console.log(e);
})
});
您应该能够捕获该错误并从那里解决您的问题。