私はデータベースに会社を追加できるアプリケーションを開発しています。もともと私のコードは純粋なスパゲッティなので、適切にモジュール化したかったのです。この目的のために、ルート、コントローラー、DAOを追加しました。コールバック、エラーキャッチ、MongoDBに関する問題
これは私のコードが今
ルート
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});
});
})
}
ダオ
どのように見えるかです
私の現在の懸念は、このようなモジュール化が混乱しているときにエラーを処理することです。私は、db挿入とthrowingとエラーがある場合はtry-catchメソッドを追加しようとしましたが、うまくいかないようです。私が試した他のものは、このように、コールバックでエラーを返して:
if (err) callback (err, null);
が、私は「彼らが送られた後、ヘッダーを設定することはできません。」になってしまいますエラー。
どのようにこの状況でエラーを処理しますか?たとえば、ある人が一意の要素に重複エントリを追加しようとした場合などです。あなたが言うように、あなたがエラーを取得する場合は、データベースが実際にエラーを返しているので
db.collection('companies').insert(company, (err, result)=>{
if (err) {
callback(err, null);
return;
}
callback(null, {message:"Succesfully loaded company", company:result});
});
、それはおそらくです:
コールバックやエラーチェックは、常に私は、トリッキーうしている行うことができますので、それを呼び出すために、あまりにも非同期機能するloadCompanyをも変更しました
注意約束を使って調べることを提案してから、より良いものを作るためにasync/awaitを調べます。 – Keith
補足として、私の元のスパゲッティアプリケーションでは、mongodbにエラーがあったときにresを503送ると、そのことが – xai2
コールバックが本当に混乱する可能性があるので、私は約束を見て非同期を待っていますこれらのケースの例はほとんどがコールバックであるようです。 ありがとう! – xai2