如何在Node.JS中为自定义函数添加响应对象

时间:2015-12-06 03:11:53

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

2 个答案:

答案 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()
})