Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Socket.io和MongoDB在注册到DB之前需要提交两次_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript Socket.io和MongoDB在注册到DB之前需要提交两次

Javascript Socket.io和MongoDB在注册到DB之前需要提交两次,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我和一个朋友正在为一个通信应用程序开发后端。 我们正在对Mongoose使用socket.io和MongoDB。第一次单击表单上的submit按钮时,我的自定义“db.js”模块在使用mongoose.find()方法后只返回一个空数组。但是,在第二次单击submit按钮时,find方法最终返回一个非空数组,其中填充了刚刚通过WebSocket发送的数据。这显然不是预期的行为 套接字IO处理程序: io.on('连接',(客户端)=>{ log(“有人连接”); client.on('creat

我和一个朋友正在为一个通信应用程序开发后端。 我们正在对Mongoose使用socket.ioMongoDB。第一次单击表单上的submit按钮时,我的自定义“db.js”模块在使用mongoose.find()方法后只返回一个空数组。但是,在第二次单击submit按钮时,find方法最终返回一个非空数组,其中填充了刚刚通过WebSocket发送的数据。这显然不是预期的行为

套接字IO处理程序
io.on('连接',(客户端)=>{
log(“有人连接”);
client.on('create',(data)=>{
data.type='rift';
log('-socket.io新数据--');
控制台日志(数据);
开关(数据类型){
“裂痕”一案:
设newRiftObject={
业主:69420,
标题:data.title,
名称:data.title,
desc:data.desc,
横幅:`/img/banner/${data.title}.jpg`,
角色:[],
地点:“恩_US”,
成员:[69420]
}
database.riftCrud.create(newRiftObject);
read(data.title);
打破
//...
违约:
打破
}
});
});
模式:
const mongoose=require(“mongoose”);
const Schema=mongoose.Schema;
module.exports.riftSchema=新架构({
业主:号码,
标题:字符串,
名称:String,
描述:字符串,
横幅:字符串,
角色:数组,
语言环境:字符串,
成员:数组
});
form.js
函数submitHandler(事件){
让formData=$('#form').serializeJSON();
//event.preventDefault();
//const socket=io();
emit('create',formData);
}
数据库通信(单独文件):
const mongoose=require('mongoose');
const dbName=“riftDB”;
猫鼬mongodb://localhost:27017/riftDB“,{useUnifiedTopology:true,useNewUrlParser:true},(err)=>{
如果(!err){console.log(`connectiontomongodb${dbName}成功`)}
else{console.log(`Error connecting to mongoDB${err}`)}
});
var{riftSchema}=require('./rift.model.js');
var Rift=猫鼬模型(“裂谷”,riftSchema);
module.exports.riftCrud={
创建:函数(对象){
创建(对象);
},
读:函数(riftName){
Rift.find({name:riftName},(err,result)=>{
if(err){console.log(err)}
else{console.log(结果[0])}
});
}
}
返回的输出: 如您所见,第一次提交返回一个空数组(每个新提交由一个新的
--socket.io new data--
头表示),但第二次提交是一个完整对象(我们需要的)

将我的数据库交互代码更改为使用
findOne()
而不是
find()
,并从
控制台删除
[0]
。相应地记录
语句,因为它不应该是数组,只会返回null

提前感谢您,
乔恩K。
[nodemon] starting `node index.js`
listening on 3000
connection to mongoDB riftDB succeeded
someone connected
someone connected
--socket.io new data--
{ title: 'asdf', desc: 'nible', type: 'rift' }
[]
--socket.io new data--
{ title: 'asdf', desc: 'nible', type: 'rift' }
[
  {
    roles: [],
    members: [ 69420 ],
    _id: 5ed9dd9b8579873337e09394,
    owner: 69420,
    title: 'asdf',
    name: 'asdf',
    desc: 'nible',
    banner: '/img/banner/asdf.jpg',
    locale: 'en_US',
    __v: 0
  },
  {
    roles: [],
    members: [ 69420 ],
    _id: 5ed9dda28579873337e09395,
    owner: 69420,
    title: 'asdf',
    name: 'asdf',
    desc: 'nible',
    banner: '/img/banner/asdf.jpg',
    locale: 'en_US',
    __v: 0
  }
]