私は約束に私たちのコードをリファクタリングしています。ノードの返信エラーが正しく(例:検証エラー)
サンプル・コードを持つ2つのブロック:私たちのルートは、ユーザー/インデックスに入力し
user.service.js
export function updateUserProfileByUsername(req, res) {
userController.getUserByUsername(req.params.username)
.then((userProfile) => {
return userController.saveUserProfileByUser(userProfile,
req.body.email,
req.body.username,
req.body.firstname,
req.body.lastname)
})
.then((updated_user) => {
res.status(200).json(updated_user.profile);
})
.catch((err) => {
res.status(404).send('something went wrong');
});
}
export function getUserProfileByUsername(req, res) {
userController.getUserProfileByUsername(req.params.username)
.then((userProfile) => {
res.status(200).json(userProfile);
})
.catch((err) => {
res.status(404).send('something went wrong');
})
}
user.controller.js
export function getUserProfileByUsername(username) {
return User.findOne({
'username': username
}).exec()
.then((user) => {
if (user)
return user.profile;
else
throw new Error("user not found!");
});
}
export function getUserByUsername(username) {
return User.findOne({
'username': username
}).exec()
.then((user) => {
if (user)
return user;
else
throw new Error("user not found!");
});
}
export function saveUserProfileByUser(user, email, username, firstname, lastname) {
user.email = email;
user.username = username;
user.firstname = firstname;
user.lastname = lastname;
return user.save(); // returns a promise
}
。 js、service.jsに入り、コントローラがデータベースの作業とエラーを処理します。
達成しようとしているのは、クライアントにフィッティングエラーを送信することです。 間違ったユーザーなどを更新するときに「ユーザーが存在しません」または「ユーザー名が長すぎます」
エラーをクライアントに送信しようとすると、結果として空のjsonが取得されます。 ({})。エラーをログに記録すると、検証エラーを含む完全なスタックトレースが取得されます。
.catch((err) => {
console.log(err) // shows me full stacktrace of the error
res.status(404).send(err); //sends {} to the client
})
約束事でこれを実装するにはどうすればよいですか?正しいミドルウェアを追加して正しいエラーメッセージを送信する必要がありますか?
私は本当にこれについて正しい方向にいくつかのヒントをいただきたいと思います。 ありがとうございます!
明らかに単純ですが、通常のようです。どうもありがとう! –