Node.js 保存数据时出现MongoDB错误
我有一个关于MongoDB的问题。 我想保存MongoDB数据,但发生了一些(未指定)错误。 我的服务器代码如下Node.js 保存数据时出现MongoDB错误,node.js,mongodb,Node.js,Mongodb,我有一个关于MongoDB的问题。 我想保存MongoDB数据,但发生了一些(未指定)错误。 我的服务器代码如下 router.post('/send/:to', (req, res) => { let chatFrom = req.session.loginInfo.username; let chatTo = req.params.to; if((typeof chatFrom !== 'string') || (chatFrom === '')) {
router.post('/send/:to', (req, res) => {
let chatFrom = req.session.loginInfo.username;
let chatTo = req.params.to;
if((typeof chatFrom !== 'string') || (chatFrom === '')) {
return res.status(400).json({
error: 'NOT LOGGED IN',
code: 1
});
} else if((typeof req.body.contents !== 'string') || (req.body.contents === '')) {
return res.status(400).json({
error: 'NO MESSAGE TO SEND',
code: 2
});
}
Account.findOne({username: chatFrom}, (err, data) => {
if(err) {
throw err;
} else if(!data) {
return res.status(400).json({
error: 'INVALID SENDER NAME',
code: 3
});
} else {
if(data.chatList.indexOf(chatTo) === -1) {
data.chatList.push(chatTo);
data.save((err) => {
////////////////////////////////////////////ERROR HERE
throw err;
});
}
}
});
Account.findOne({username: chatTo}, (err, data) => {
if(err) {
throw err;
} else if(!data) {
return res.status(400).json({
error: 'INVALID PARTNER NAME',
code: 3
});
} else {
if(data.chatList.indexOf(chatFrom) === -1) {
data.chatList.push(chatFrom);
data.save((err) => {
throw err;
});
}
let newChat = new Chat({
from: chatFrom,
to: chatTo,
contents: req.body.contents,
isRead: false,
});
newChat.save((err) => {
if(err) {
throw err;
} else {
return res.json({
success: true
});
}
});
}
});
});
“///error HERE”区域发生错误。
错误日志如下所示
events.js:165
犯错误;
^
这是node.js应用程序,mongoose版本是4.7.7
++++++++++++++++++++++++++
我的模型如下
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
const Chat = new Schema({
from: {
type: String,
trim: true
},
to: {
type: String,
trim: false
},
contents: {
type: String,
trim: true
},
isRead : {
type: Boolean
},
sended: {
type: Date,
default: Date.now
}
});
export default mongoose.model('chat', Chat);
请共享您的模型代码,并在代码中指定哪个方法是异常源。是的,请共享您的模式。我猜:
findOne
是一个异步调用。当节点第一次点击findOne
时,节点将把它放在执行堆栈上,然后继续前进,只得到另一个findOne
。如果两个调用都试图写入同一文档,则可能会发生此错误。你能用promise同步完成吗?有很多事情需要解决,但请帮助检查数据是mongoose模型还是普通js对象。像@Ankitgokale opnion,这似乎是异步问题。。。我在正文内容的底部添加了我的模型代码。
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
const Chat = new Schema({
from: {
type: String,
trim: true
},
to: {
type: String,
trim: false
},
contents: {
type: String,
trim: true
},
isRead : {
type: Boolean
},
sended: {
type: Date,
default: Date.now
}
});
export default mongoose.model('chat', Chat);