[英]How to make a function validator for express-validator and use it as Middleware?
[英]How to call express-validator from middleware function?
我一直在努力從middleware
function 調用express-validator
function。我可以看到執行很高興express-validator
但沒有任何驗證。 下面是代碼片段:
router.get("/v2/course/poc", Policy.hybridPolicy, V2manageCourse.validatePOC)
Policy.js
const { basicValidations } = require("../../utils/common");
class Policy {
constructor(req, res, next) {
this.req = req;
this.res = res;
this.next = next;
}
static hybridPolicy = async (req, res, next) => {
try {
log.info("hybridPolicy check")
await schema.validation(req, res)
await schemaValidationCheck.validate(req, res);
next();
} catch (e) {
console.log("hybridPolicy: ", e)
log.error("Error occured during hybrid policy check", e.message)
return next(ApiError.unAuthorize(e.message));
}
}
}
module.exports = Policy
schema.js
const { body, query } = require("express-validator");
const validate = (method) => {
switch (method) {
case "getCourseById": {
return [
query("courseid")
.exists()
.isMongoId()
.withMessage("courseid must be mongoId")
.not()
.isEmpty()
.withMessage("courseid can not be empty and must be a MongoId"),
];
}
}
}
module.export = {
validate
}
schemavalidationCheck.js
const { validationResult } = require('express-validator')
const validate = async (req, res) => {
const errors = validationResult(req)
console.log(errors)
if (errors.isEmpty()) {
return;
}
const extractedErrors = []
errors.array().map(err => extractedErrors.push({ [err.param]: err.msg }))
throw new Error({
errors: extractedErrors,
})
// return next(res.status(422).json({
// errors: extractedErrors,
// }))
}
module.exports = {
validate
}
我在其中使用return()
而不是next()
,因為我想在調用next()
之前檢查所有驗證。 有人知道為什么 express-validator 無法檢查嗎?
在你的 catch 塊中,你不應該調用:
next(ApiError.unAuthorize(e.message));
相當:
try {
...
} catch(e) {
res.send(ApiError.unAuthorize(e.message));
log.error("Error occured during hybrid policy check", e.message);
}
或者,如果您在捕獲中間件時出錯,您可以簡單地執行以下操作:
try {
...
} catch(e) {
throw new Error(ApiError.unAuthorize(e.message));
}
在您的錯誤中間件中,您可以適當地處理。 請參閱https://expressjs.com/en/guide/error-handling.html以供參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.