是否可以将通过express.js发出的每个请求包装到中,domain
或trycatch
在此处查看trycatch信息?
我正在尝试创建一种“全部捕获”(快速错误处理程序中间件不捕获异步调用),以确保将我遗漏的任何错误都发送给用户500。
如果您有一个异步函数调用(例如process.nextTick()),则它将超出express错误处理程序的范围,从而完全杀死该进程。因此,并非在所有情况下都使用快速错误处理程序。
Express已经具有错误处理程序实现。它从connect继承它。要使用它,您需要将其添加为最后一个中间件点(最后一次app.use(…)调用)。例如:
var express = require('express')
, app = express();
app.use(app.router);
app.use(express.errorHandler());
// app.get(...), app.post(...), app.listen(...), etc.
如果要使用简单的500响应代码处理所有错误,则可以express.errorHandler()
用自己的函数替换。在这种情况下,您的代码将如下所示:
var express = require('express')
, app = express();
app.use(app.router);
app.use(function(err, req, res, next){
if (!err) return next();
res.send(500);
});
// app.get(...), app.post(...), app.listen(...), etc.
有关此方法的更多信息,请参见代码中的表达错误示例注释。
更新 :
当然,您可以为每个请求使用域。您可以单独包装每个请求,也可以对路由器使用包装来处理所有异常。代码如下:
var express = require('express')
, http = require('http')
, app = express()
, domain = require('domain');
//app.use(app.router);
app.use(function(req, res, next){
var d = domain.create();
d.on('error', function(er) {
console.log('error, but oh well', er.message);
res.send(500);
});
// explicitly add req and res
d.add(req);
d.add(res);
d.run(function() {
app.router(req, res, next);
});
});
app.get('/', function(req,res){
process.nextTick(function(){
throw new Error('Check Error');
});
});
http.createServer(app).listen(3000, function(){
console.log('Express server listening on port 3000');
});
!!但!!
切勿在生产中使用它。这样做的原因本质上是JS抛出异常的方式。这绝对是导致应用程序泄漏的原因,并使它更加不稳定。您可以使用此类错误处理来实现自定义的关机算法(例如,关闭已打开的连接)。有关正确使用域的更多信息,请参见文档。
要监视泄漏,可以使用本文中的技术。
更新2 :
我只是不能离开这一切。trycatch
码:
var express = require('express')
, http = require('http')
, app = express()
, domain = require('domain')
, trycatch = require('trycatch');
//app.use(app.router);
app.use(function(req, res, next){
trycatch(function(){
app.router(req, res, next);
}, function(er){
console.log(er.message);
res.send(500);
});
});
app.get('/', function(req,res){
process.nextTick(function(){
throw new Error('Check Error');
});
});
http.createServer(app).listen(3000, function(){
console.log('Express server listening on port 3000');
});
我已经审查了的来源,trycatch
没有任何魔术。仍然是泄漏的原因。trycatch
有domain
内幕。
我正在创建一个不使用数据库的服务。 我将所有的请求数据存储在文件系统中。 我正在使用spring Boot开发服务。
我正在Postman中编写测试,我有多个请求分组如下: > 某些测试标题: > 创建用户(一组“预请求”): 发送一些创建用户所需的请求,这些请求是运行测试所必需的 对已创建用户的一些操作(这里我正在测试测试标题中的内容) 一个或多个请求 < li >创建用户(一组“预先请求”,与测试1中相同。): < ul > < li >发送创建用户、运行测试所需的一些请求 一个或多个请求 总的来说,当我想测
如何每秒触发10个请求,而不是等待前面的线程在jmeter中完成。 需要打1000次, 当前线程组中的以下配置,用户数:10循环:100 我猜线程正在等待响应,即使在第二秒之后。 但是我需要每秒发出10个请求,不管响应如何。 恒定吞吐量计时器将有助于做到这一点?如果是这种情况,我应该提供什么配置。 非常感谢您的帮助。。
问题内容: 我正在使用Square的Retrofit库进行短暂的网络调用。我在每个请求中都包含了一些数据作为参数。像这样: 必须定义并且对于中概述的每个单个端点都是很麻烦的。有没有一种方法可以设置每个请求应包含的基本参数集?类似于我们如何设置共同点? 问题答案: 您可以通过将一个自定义RequestInterceptor添加到RestAdapter来确保所有请求都具有这些查询参数。
AWS S3文件状态(https://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html): Amazon S3会自动扩展到高请求率。例如,您的应用程序可以在存储桶中的每个前缀每秒至少实现3,500个PUT/POST/DELETE和5,500个GET请求。 为了测试这一点,我有以下NodeJS代
我的方法正确吗?在正文中发送凭据>接收响应(成功)>登录成功>将令牌存储在会话存储中并将其设置在头中>会话过期时注销 存储jwt