gpt4 book ai didi

node.js - 路线完成后重新调整 use()

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:32 25 4
gpt4 key购买 nike

我尝试使用 Restify 的“use()”方法来进行通用错误处理,例如

server = restify.createServer({...});
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
...
app.post('/test/:id', function (req, res, next) {...})
server.use(function(err, req, res, next) {
logger.error({req: req}, "error processing request");

});

但是在路由完成处理后,最后一个 .use() 处理程序从未被调用。它是在路线之后“注册”的。我可以在服务器启动时看到,这个 .use() 是在我的路由处理后处理的。我对 Restify 相当陌生,所以我的问题是, .user() 方法可以用于在路由完成后应用处理程序。我知道我们可以监听“after”事件以在路由完成后进行处理,但想看看我们是否可以执行 .use() 处理程序。

更新:这是代码的简化版本。在调用 server.post() 之前注册的 .use() 方法,而不是在 server.post() 之后注册的方法。有什么建议么?

var restify = require('restify');
var cookieParser = require('restify-cookies');
var helmet = require('helmet');
var util = require('util');
var logger = require('./util/logger');


module.exports = function(server){
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());

server.use(helmet.noCache());
server.use(helmet.hidePoweredBy());

server.use(cookieParser.parse);

// this .use() method is called when accessing the server.post route below
server.use(function(req, res, next) {
console.log('BERORE ROUTE');
return next();
});

server.post('/test/:returnId', function (req, res, next) {
var err = new restify.errors.InternalServerError('oh noes!');
return next(err);
});

// this .use() method is not called when accessing the server.post route above
server.use(function(req, res, next) {
console.log('Tata...');
return next();
});
};

最佳答案

看看里面的代码会很有趣

app.post('/test/:id', function (req, res, next) {
// what is happening here?
});

我猜你没有调用next,所以下一个中间件(use语句中的日志中间件)永远不会被调用。因此调用 next() 将调用您的中间件。

但对于您的情况,可能最好按照 restify docs 中的描述提出错误并处理错误。 :

app.post('/test/:id', function (req, res, next) {
// some internal unrecoverable error
var err = new restify.errors.InternalServerError('oh noes!');
return next(err);
});

app.on('InternalServer', function (req, res, err, next) {
//err.body = 'something is wrong!';
logger.error({req: req}, "error processing request"); // <= from your code
return next();
});

但这取决于您想要实现的目标以及您在 app.post 内执行的操作。

关于node.js - 路线完成后重新调整 use(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36505516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com