我一直致力于一个允许我将公司添加到数据库的应用程序。最初我的代码是纯意大利面条,所以我想正确地模块化它。为此,我添加了路线,控制器和dao。
这就是我的代码现在的样子
路线
app.post('/loadcompanies', (req, res)=> {
companiesController.loadcompany(req.body, (results)=>{
console.log(results);
res.send(200, "working!");
})
})
控制器
module.exports.loadCompany = (body, callback)=>{
companiesDao.loadCompany(body, callback);
}
道
module.exports.loadCompany = (company, callback)=>{
MongoClient.connect(conexionString, (err, database) => {
if (err) console.log(err);
db = database;
console.log(company);
db.collection('companies').insert(company, (err, result)=>{
callback({message:"Succesfully loaded company", company:result});
});
})
}
我目前担心的是,在这样的模块化时处理错误会令人困惑。我尝试在数据库插入周围添加一个try-catch方法,如果有一个则抛出和错误,但这似乎不起作用。我尝试过的其他事情是在回调中返回错误,如下所示:
if (err) callback (err, null);
但我最终收到了“发送后无法设置标头”。错误。
在这种情况下你会如何处理错误?例如,在有人试图在唯一元素中添加重复条目的情况下。
答案 0 :(得分:1)
您应该能够在插入函数的回调中简单地进行错误检查:
db.collection('companies').insert(company, (err, result)=>{
if (err) {
callback(err, null);
return;
}
callback(null, {message:"Succesfully loaded company", company:result});
});
如果您收到错误,那可能是因为数据库实际上返回了错误。您还可以使您的错误更具体,例如:
module.exports.loadCompany = (company, callback)=>{
MongoClient.connect(conexionString, (err, database) => {
if (err) {
callback(new Error('Connection error: ' + err.Error());
return;
}
db = database;
console.log(company);
db.collection('companies').insert(company, (err, result)=>{
if (err) {
callback(new Error('Insertion error: ' + err.Error());
return;
}
callback(null, {message:"Succesfully loaded company", company:result});
});
})
答案 1 :(得分:0)
这是您的loadCompany以async / await格式完成的。
Notise不需要进行错误检查,错误将按预期传播到promise链上。
注意我也将loadCompany更改为异步函数,因此要调用它,您只需执行var ret = await loadCompany(conpanyInfo)
module.exports.loadCompany = async (company)=>{
let db = await MongoClient.connect(conexionString);
console.log(company);
let result = await db.collection('companies').insert(company);
return {message:"Succesfully loaded company", company:result};
}