Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在发送响应之前,创建一个中间件来验证响应对象_Node.js_Express_Middleware - Fatal编程技术网

Node.js 在发送响应之前,创建一个中间件来验证响应对象

Node.js 在发送响应之前,创建一个中间件来验证响应对象,node.js,express,middleware,Node.js,Express,Middleware,我正在Express框架上构建一个小型CRUD应用程序。我希望有一个中间件,它接受我的所有响应,并根据预期的对象模式验证它们。我目前面临的问题是,我不知道把这个中间件放在哪里。我试图将它放在我的路由和错误处理程序中间件之后,但由于某些原因,它没有工作。当我在定义的路由之前粘贴它时,这个中间件工作了,但没有路由处理程序中所需的数据。我非常熟悉Express中的中间件概念,但仅限于请求 如果您对此问题没有具体答案,请随时分享您的意见,如果这有助于验证所有出站响应。谢谢 非常感谢您的帮助。我可以给您一

我正在Express框架上构建一个小型CRUD应用程序。我希望有一个中间件,它接受我的所有响应,并根据预期的对象模式验证它们。我目前面临的问题是,我不知道把这个中间件放在哪里。我试图将它放在我的路由和错误处理程序中间件之后,但由于某些原因,它没有工作。当我在定义的路由之前粘贴它时,这个中间件工作了,但没有路由处理程序中所需的数据。我非常熟悉Express中的中间件概念,但仅限于请求

如果您对此问题没有具体答案,请随时分享您的意见,如果这有助于验证所有出站响应。谢谢


非常感谢您的帮助。

我可以给您一个用法示例。您可以根据需要修改
响应
对象



// ResponseHandler.js
// Creating a response object
class ResponseHandler{
    constructor(statusCode, body, success = 1){

      this.statusCode = statusCode;
      this.body = body;
      this.body.success = success ? success : (statusCode == 200 ? 1 : 0);
    }
  }
  
  module.exports = ResponseHandler;


// responseHandler.js
const ResponseHandler = require('./ResponseHandler');

const responseValidator = (err, req, res, next) => {
  let res = res;
  if (!(res instanceof ResponseHandler)) {
    const statusCode = res.statusCode;
    const body = res.body;
    const success = res.body.success;
    res = new ResponseHandler(statusCode, body, success);
  }

  next(res);
};

const responseHandler = (err, req, res, next) => {

    const response = responseValidator(res);

    res.status(response.statusCode).send(response.body);
};

module.exports = {
    responseHandler
};

// Usage

// In index.js (After defining your routes)
app.use(responseHandler);

// In controller
let res = {
    statusCode: 200,
    body: {
        success: 1, // Optinal
        message: "This is a success message."
    }
}
return next(res);


请显示相关代码,以便我们能够准确地看到您正在尝试执行的操作。中间件必须在任何想要从它已经完成的工作中获益的路由之前,按照声明的顺序匹配和执行路由/中间件。如果把它放在前面会产生一些问题,那么您必须向我们展示代码并解释问题,这样我们才能提供帮助。关于代码的问题应包括相关代码。当我们能够看到代码时,我们可以更快、更准确、更具体地提供帮助。如果您试图验证服务器发送的内容,那么这不是中间件的工作,因为中间件处理到达的数据。这是一个常见函数的作业,您可以在任何想要验证其自身输出的路由中手动调用该函数。非常感谢您提供的示例。我能够解决我的问题。我只需要将err参数添加到我的中间件中。