Javascript 如何向Node.JS中的响应对象添加自定义函数

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) { // ..

在我的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

您可以使用自己的自定义中间件。将此添加到路由处理程序上方的某个位置:

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个函数附加到响应。还有什么更好的方法可以提高性能?