0

node restify connect redis セッション設定を使用しています。restify の「uncaughtException」イベントを通じて、キャッチされていない例外を処理しています。ただし、connect redis を使用すると、uncaughtExceptions がキャッチされず、サーバーがシャットダウンします。

再現方法: 次のコードを実行し、ブラウザーで localhost:8000/api/boom に移動します。

var connect = require('connect');
var restify = require('restify');
var bunyan = require('bunyan');
var RedisStore = require('connect-redis')(connect);

var app = restify.createServer({
  log : bunyan.createLogger({name: "server"}),
});

var log = bunyan.createLogger({name: "app"});

app.on('uncaughtException', function(request, response, route, error) {
  log.error(error);
  response.send(new restify.InternalError("Internal server error"));
});
// please see 
/*http://stackoverflow.com/questions/19409441/req-originalurl-not-set-by-restify-it-is-needed-by-connect-session-middleware/*/
app.use(function(req, res, next) {
  req.originalUrl = req.url;
  next();
});

app.use(connect.cookieParser());

app.use(connect.session({
  secret : "open sesame",
  store: new RedisStore({
    "host": "127.0.0.1",
    "pass": "",
    "port": 6379
  })
}));
//app.use(connect.static(__dirname + '/public'));

app.get('/api/boom', function(req, res, next) {
  throw new Error("Boom!");

  res.send("ok");
  next();
});
(app).listen(8000, function() {
  console.log("server started. Listening at " + 8000);
});
4

1 に答える 1

0

上記のコードを実行すると、ブラウザが以下を出力し、サーバーは実行されたままになります。

{"code":"InternalError","message":"Internal server error"}

古いバージョンのノードを使用している可能性がありますか? 必要な項目ごとに「npm install」を正しく実行しましたか? より多くの情報を提供してください。

于 2014-01-17T19:14:43.710 に答える