我正在Express框架上构建一个小的CRUD应用程序。我希望有一个中间件来获取我的所有响应,并根据预期的对象模式对它们进行验证。我现在面临的问题是,我不知道把这个中间件放在哪里。我试图把它放在我的路由和错误处理中间件之后,但由于某种原因,它不起作用。当我在我定义的路由之前粘贴它时,这个中间件可以工作,但没有来自路由处理程序的所需数据。我非常熟悉Express中的中间件概念,但仅限于请求。
如果您对此问题没有具体的答案,请随时分享您的意见,如果它有助于验证所有出站响应。谢谢。
任何帮助都是非常感谢的。
发布于 2021-04-30 18:14:11
我可以给你一个用法的例子。您可以根据需要修改response对象。
// 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);https://stackoverflow.com/questions/67328297
复制相似问题