Javascript express ws正在消除错误
我正在节点应用程序中使用express和express ws。然而,expressws似乎正在消除错误,这使得调试代码变得非常困难 我已将代码缩减为以下内容,但仍然会重现问题:Javascript express ws正在消除错误,javascript,node.js,express,Javascript,Node.js,Express,我正在节点应用程序中使用express和express ws。然而,expressws似乎正在消除错误,这使得调试代码变得非常困难 我已将代码缩减为以下内容,但仍然会重现问题: // configure express var express = require('express'); var app = express(); var expressWs = require('express-ws')(app); // set up routes app.get('/', function(
// configure express
var express = require('express');
var app = express();
var expressWs = require('express-ws')(app);
// set up routes
app.get('/', function(req, res) {
console.log("GET");
nonExistingFunction(); // Called to demonstrate a traceback is provided.
});
app.ws('/', function(ws, req){
console.log("WS");
nonExistingFunction(); // Called to demonstrate this error is silenced.
});
// start service
app.listen(90);
当我从浏览器获取时,控制台会显示“获取”日志消息,然后是回溯(如预期的那样)。即,
当我通过Websocket连接时,控制台只显示“WS”日志消息-
没有追踪。即,
WS
默认情况下express ws-silence是否存在错误?有办法把它关掉吗?我有一个解决办法
Express有自己的默认错误处理程序,它将回溯输出到控制台,但允许应用程序继续运行。expressws在wrap middleware.js
中使用try-catch嵌套来执行相同的操作
try {
/* Unpack the `.ws` property and call the actual handler. */
middleware(req.ws, req, next);
} catch (err) {
/* If an error is thrown, let's send that on to any error handling */
next(err);
}
但是,这似乎并没有传递给默认的错误处理程序。因此,您可以为app
指定一个错误处理程序中间件。这必须是链中的最后一个中间件。下面的代码有点粗制滥造,但不管错误是发生在HTTP还是WS-route函数中,都会将回溯输出到控制台
// configure express
var express = require('express');
var app = express();
var expressWs = require('express-ws')(app);
// set up routes
app.get('/', function(req, res) {
console.log("GET");
nonExistingFunction(); // Called to demonstrate a traceback is provided.
});
app.ws('/', function(ws, req){
console.log("WS");
nonExistingFunction(); // Called to demonstrate this error is no longer silenced :)
});
// set up error handler
function errorHandler (err, req, res, next) {
if(req.ws){
console.error("ERROR from WS route - ", err);
} else {
console.error(err);
res.setHeader('Content-Type', 'text/plain');
res.status(500).send(err.stack);
}
}
app.use(errorHandler);
// start service
app.listen(90);
您能提供一个跟踪消息示例吗?另外,为什么要使用
控制台进行调试?为什么不是一个节点调试器?我只是使用console.log作为一个快速简单的测试,以确保相关功能得到执行。我用控制台输出编辑了这个问题,但更重要的是WS-connection根本不提供预期的回溯,所以当我的代码出现问题时,要找出ws-route函数中失败的地方变得非常困难。
// configure express
var express = require('express');
var app = express();
var expressWs = require('express-ws')(app);
// set up routes
app.get('/', function(req, res) {
console.log("GET");
nonExistingFunction(); // Called to demonstrate a traceback is provided.
});
app.ws('/', function(ws, req){
console.log("WS");
nonExistingFunction(); // Called to demonstrate this error is no longer silenced :)
});
// set up error handler
function errorHandler (err, req, res, next) {
if(req.ws){
console.error("ERROR from WS route - ", err);
} else {
console.error(err);
res.setHeader('Content-Type', 'text/plain');
res.status(500).send(err.stack);
}
}
app.use(errorHandler);
// start service
app.listen(90);