我遇到一个奇怪的错误。我猜是因为我没有正确处理该错误以获取更多信息。这是我遇到的错误。我在这里搜索失败,但没有找到类似的结果。这些文档只是让我感到困惑。
{"name":"MongoError","level":"error","service":"user-service"}
这是我的连接脚本:
const mongoose = require('mongoose'),
logger = require('./logging');
async function connect(){
await mongoose.connect("mongodb://localhost:27017/fdData")
.catch(error => {
logger.error(error);
});
}
async function disconnect(){
await mongoose.disconnect()
logger.info('DB disconnected');
}
module.exports= {connect, disconnect}
}
module.exports= {connect, disconnect}
这就是我所说的。 (这只是脚本的一小段)。
在太平洋标准时间1024am更新1/20/20。
//schema setup
const weatherSchema = new mongoose.Schema({
condition: String,
temp: Number,
windDir: String,
windSpd: Number,
windGust: Number,
windChill: String,
humidity: Number,
icon: String,
tempIcon: String,
date: String,
updated: String,
});
const weatherWarningSchema = new mongoose.Schema({
warning: String,
warningStart: String,
warningExpire: String,
warningBody: String,
id: String,
date: String,
});
const Weather = mongoose.model("weather", weatherSchema);
const Warning = mongoose.model("warning", weatherWarningSchema);
currentWeather=[];
async function saveWeather(update){
/////////commented Out for troubleshooting//////////
// await db.connect()
// .then(error=>{logger.error(error)
/////////end comments/////////////
Weather.findOneAndUpdate({date: update.date},
{ date:update.date,
condition:update.condition,
temp:update.temp,
windChill:update.windChill,
windDir:update.windDir,
windSpd:update.windSpd,
windGust:update.windGust,
humidity:update.humidity,
icon:update.icon,
tempIcon:update.tempIcon,
updated:update.updated},
{upsert:true,
new: true,},
function(error, result){
if (error){
logger.error(error);
} else{
console.log(result);
logger.info('Weather Saved to DB '+moment().utcOffset(-8).format('HH:mm'))
}
})
console.log('Mongoose Ready State: '+mongoose.connection.readyState)
///////commented out for troubleshooting////////
// }).then((res, error)=>{
// if(error){
// logger.error(error)
// }
// db.disconnect();
// })
/////////end comments/////////
}
这是控制台中完整的初始输出:
获取刻录数据...
正在更新天气数据...
(节点:3890)DeprecationWarning:不建议使用当前的“服务器发现和监视”引擎,并将在以后的版本中将其删除。要使用新的“服务器发现和监视”引擎,请将选项{useUnifiedTopology:true}传递给MongoClient构造函数。
(节点:3890)DeprecationWarning:不建议使用当前URL字符串解析器,并且在以后的版本中将其删除。要使用新的解析器,请将选项{useNewUrlParser:true}传递给MongoClient.connect。
{“消息”:“仪表板服务器正在3000上运行”,“级别”:“信息”,“服务”:“用户服务”}
{“消息”:“船员令牌是当前的”,“级别”:“信息”,“服务”:“用户服务”}
{“消息”:“ A911令牌为当前”,“级别”:“信息”,“服务”:“用户服务”}
猫鼬就绪状态:1
{ _id:5e25ef3d8c936f22f7722326, 日期:“ 2020-01-20”, __v:0, 条件:“晴天”, 湿度:96, 图标:“ sunny.png”, 温度:34, tempIcon:“ https://cdn.aerisapi.com/wxicons/v2/cold.png”, 更新:“ 01/20/20 10:19”, windChill:“ 34”, windDir:“ N”, windGust:0, windSpd:0 }
{“消息”:“天气已保存到数据库10:19”,“级别”:“信息”,“服务”:“用户服务”}
正在保存刻录数据...
刻录数据已保存。
答案 0 :(得分:0)
错误告诉您db disconnected
,实际上是您没有等待updateOne
函数返回的承诺。
您应该在此处添加await
来解决此问题。
await db.connect()
.then(async (error) {
logger.error(error)
console.log('Saving Weather... '+mongoose.connection.readyState) //"Saving Weather...1"
await Weather.updateOne({date: update.date},
... )
}).then((res, error)=>{
if(error){
logger.error(error)
}
db.disconnect();
})
答案 1 :(得分:0)
我知道了!!!
Mongoose和MongoDB运行正常。问题出在currentWeather
数组的分配中。我将新数据推送到阵列上,而不是替换它。因此,我的脚本不断将currentWeather[0]
放入数据库中,这就是为什么它将一次又一次不起作用的原因。