0
我正在將我們的代碼重構爲承諾。節點正確返回錯誤(例如驗證錯誤)
兩個街區與示例代碼:
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
})
我該如何實現承諾?我應該添加額外的中間件發送正確的錯誤消息嗎?
我真的很感激這個方向正確的方向。 在此先感謝!
明顯和簡單,像往常一樣。非常感謝! –