我需要在我的控制器中验证多项检查并将可能的错误抛出到我的路由中。像这样的东西:
路由器:
- 将 post var 发送到控制器
控制器:
- 如果 post.categoria 为空,则抛出错误
- 如果已经存在,请检查 mysql
- 如果已经存在则抛出错误
路由器代码:
// POST new
router.post('/', function(req, res, next){
// get post var
var post = {categoria: req.body.categoria};
// validate
controller.newCategoria(post).then(
result => {
// return valid result, I'll implement it later
res.json(result);
},
error => {
// return error to frontend
res.json(error);
}
);
});
控制器代码:
module.exports.newCategoria = async (post) => {
// throw error if blank
if (post.categoria.length == 0)
throw "categoria is empty"; // portuguese
db.query('SELECT COUNT(id) AS count FROM categoria WHERE ?', post, function(err, result) {
if (err)
throw err;
if (JSON.stringify(result[0].count) >= 1)
throw new Error("already exists");
});
return "ok";
};
如果我发送现有的类别,我会得到: Rethrow non-MySQL errors
我试图使用一个承诺:
module.exports.newCategoria = async (post) => {
// check if blank
if (post.categoria.length == 0)
throw "blank categoria";
new Promise((resolve, reject) => {
db.query('SELECT COUNT(id) AS count FROM categoria WHERE ?', post, function(err, result) {
if (err)
return reject(err);
if (JSON.stringify(result[0].count) >= 1)
return reject(new Error("already exists"));
return resolve(result);
});
}).then(
resolve => {
// ok.. deal with it
console.log('ok');
console.log(resolve);
},
error => {
throw error;
}
).catch((error) => {
throw error;
});
return "ok";
};
我不知道如何把它扔回去死记硬背,我收到了这个错误:
UnhandledPromiseRejectionWarning:错误:已经存在
我是 NodeJS 的新手,我需要一个好的练习。谢谢。