私の約束についての理解は完璧ではありません。
エラーと例外のケースを処理するコードがわかりません。try-catchまたはpromise.catchへのpromise.rejectの処理
コードを正しく記述するのに役立ちます。
1st。試す - のtry-catchがsequelizerのpromise.catchをキャッチすることができます場合はキャッチをsequelizerのpromise.rejectこのため
async function doGetAdminList(adminName) {
let adminList;
try {
adminList = await sequelize.query(
sqls.GET_ADMIN_LIST,
{ replacements: { adminName: adminName }, type: sequelize.QueryTypes.SELECT }
);
} catch (e) {
return Promise.reject({status:500, message: "SQL Error" });
}
if (!adminList || !Object.keys(adminList).length) {
log.info('\nadminList not found :\n');
return Promise.reject({status:400, message: 'adminList not found.' })
}
return adminList;
}
のために、私は疑問に思います()。
第2位。 sequelizerのpromise.rejectにこのために
async function doGetAdminList(adminName) {
let adminList;
adminList = await sequelize.query(
sqls.GET_ADMIN_LIST,
{ replacements: { adminName: adminName }, type: sequelize.QueryTypes.SELECT }
);
if (!adminList || !Object.keys(adminList).length) {
log.info('\nadminList not found :\n');
return Promise.reject({status:400, message: 'adminList not found.' })
}
return adminList;
}
を処理していない、私はsequelizerのpromise.reject()は、呼び出し元の関数を渡され、()promise.catchで、呼び出し元のをcatchedことができますかしら。
上記のsequelize-using関数は、express関数の下で使用されます。
adminController.js
const jwtAuth = require('../common/jwtAuth.js');
exports.getAdminList = function (req, res) {
res.setHeader("Content-Type", "application/json; charset=utf-8");
if (!req.body.adminName) {
return res.status(400).json({ message: 'adminName is empty.' });
}
jwtAuth(req.headers.accesstoken)
.then((decoded) => {
worker = decoded.loginName;
return doGetAdminList(adminName);
})
.then((adminList) => {
log.info("getAdminList() finish");
res.status(200).json(adminList);
})
.catch(e => {
log.error(e);
return res.status(e.status).json(e);
});
};
jwtAuth.js
も機能を約束しています。
const jwt = require('jsonwebtoken');
module.exports = async function verifyJwt(token) {
return await new Promise((resolve, reject) => {
if (!token) {
reject({status:401, message:'Empty token'});
return;
}
jwt.verify(token,"dipa",function(err, decoded){
if(err) {
reject({status:401, message:'TokenExpiredError'});
} else {
resolve(decoded);
}
});
});
}
内で
getAdminList
をすれば'async function'を使用する場合、' return Promise 'の代わりに 'throw'を使用してください。拒否」 – Bergiあなたの質問は「*エラーをキャッチしないでください。それともキャッチして別のエラーを再現してはいけませんか?」と思いますか? 'sequelize.query'が' status'を持つオブジェクトで拒否されない場合、SQLエラーを捕捉しないバージョンは動作しません。 – Bergi
@Bergiはい、あなたの権利があります。私は完全に拒否の例外をキャッチ誤解するかもしれません。 – sungyong