在我的API应用程序中,我对不同部分的错误有固定的响应。正如您所看到的,res.status(400).json({"error": "Invalid input"})
实际上在不同的文件和模块中重复了很多。
我可以创建模块函数invalidInput(res)
,这将消除重复,但我真的希望它是res
对象的全局部分,如res.invalidInput()
。
我怎样才能在JS / Node.JS中创建它?
router.get("/users", function(req, res) {
// ...
if (error) {
return res.status(400).json({"error": "Invalid input"});
}
});
router.get("/items", function(req, res) {
// ...
if (error) {
return res.status(400).json({"error": "Invalid input"});
}
});
// etc
答案 0 :(得分:17)
您可以使用自己的自定义中间件。将此添加到路由处理程序上方的某处:
router.use(function(req, res, next) {
res.invalidInput = function() {
return res.status(400).json({"error": "Invalid input"});
};
next();
});
然后您可以在路由处理程序中执行res.invalidInput()
。
答案 1 :(得分:1)
我写了这段代码,它对我有用:
const express = require('express')
const app = express()
app.use(function(req, res, next) {
/**
* (default status 200)
* Success response
*/
res.success = function ({result={}, code=200, message=""}) {
return res.json({
result,
code,
message
})
}
/**
* Custom error response
*/
res.error = function({errors={}, code=400, message="", result={}}) {
return res.json({
errors,
code,
message,
result
})
}
/**
* (status 403)
* Bad request response
*/
res.badreq = function({errors={}, code=400, message="", result={}}) {
return res.status(400).error({ errors, code, message, result })
}
/**
* (status 403)
* Forbidden request response
*/
res.forbidden = function({errors={}, code=403, message="", result={}}) {
return res.status(403).error({ errors, code, message, result })
}
/**
* (status 401)
* Unauthorize request response
*/
res.unauth = function({errors={}, code=401, message="", result={}}) {
return res.status(403).error({ errors, code, message, result })
}
/**
* (status 500)
* Internal request response
*/
res.internal = function({errors={}, code=500, message="", result={}}) {
return res.status(500).error({ errors, code, message, result })
}
next()
})