Javascript 如何向Node.JS中的响应对象添加自定义函数
在我的API应用程序中,我对不同部分的错误有一个固定的响应。正如您所看到的,Javascript 如何向Node.JS中的响应对象添加自定义函数,javascript,node.js,express,Javascript,Node.js,Express,在我的API应用程序中,我对不同部分的错误有一个固定的响应。正如您所看到的,res.status(400).json({“error”:“Invalid input”})实际上在不同的文件和模块中重复了很多次 我可以创建模块函数invalidInput(res),这将消除重复,但我真的希望它成为res对象的全局部分,比如res.invalidInput() 我如何在JS/Node.JS中实现它 router.get("/users", function(req, res) { // ..
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
您可以使用自己的自定义中间件。将此添加到路由处理程序上方的某个位置:
router.use(function(req, res, next) {
res.invalidInput = function() {
return res.status(400).json({"error": "Invalid input"});
};
next();
});
然后您可以在路由处理程序中执行
res.invalidInput()
。我编写了这段代码,它对我有用:
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()
})
这种方法会降低性能吗。?由于为每个请求和响应对象的附件创建了一个新函数。我正在做同样的12个函数附加到响应。还有什么更好的方法可以提高性能?