javascript - 创建 NodeJS + Redis 应用程序导致错误,退出代码为 139

标签 javascript node.js redis

我的 app.js 包含以下内容:

var express = require('express')
  , http = require('http')
  , path = require('path')
  , redis = require('redis')
  , client = redis.createClient();

var app = express();

app.configure(function(){
    app.set('port', process.env.PORT || 3000);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser('your secret here'));
    app.use(express.session());
    app.use(app.router);
    app.use(require('stylus').middleware(__dirname + '/public'));
    app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

require('./routes')(app);

client.on("connect", function () {
    console.log("Client on connect");
});


http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

我正在尝试的是使用 node_redis用于连接 Redis 实例的库。 Node.js 和 Redis 都安装在本地。我想指出的一件事是我创建并尝试使用 Jetbrains 的 Webstorm 运行这个项目(因为我想要一个 IDE 为我提供一些调试)。字符串“Client on connect”被记录到控制台,但我的应用几乎每次都崩溃并显示“Process finished with exit code 139”。我尝试通过命令行运行应用程序,应用程序没有崩溃。最糟糕的是,当应用程序无法在 Webstorm 中运行时,没有任何类型的堆栈跟踪。有没有人知道问题是什么,或者我在哪里可以找到有关此错误代码的更多信息?

另外,为了让我们在同一页面上:我的 Redis 服务器已启动并正在运行,并从另一个自定义 Web 应用程序接收持续不断的数据流。我能够启动 redis-cli,并验证 Redis 是否确实包含任何数据。

最佳答案

如果您使用的是 Unix 类型的操作系统,则 139 表示“128 + 您的 Node 进程崩溃的信号编号”。所以在你的例子中,那个信号是 11,在大多数 Unices 上这意味着 SIGSEGV。换句话说:Node 进程因某种无效的内存引用而崩溃。

根据我的经验,如果您在从 IDE(或其他应用程序)启动进程时遇到此类错误,通常意味着 IDE 正在通过某种导致崩溃的环境。您可以尝试将 GDB 附加到正在运行的 Node 进程(但在连接到它之前,导致崩溃)以找出导致它的原因。

另一个解决方案:如果您可以更改 Webstorm 将启动的 Node 可执行文件,您可以尝试制作一个包装 Node 并打印一些调试信息的 shell 脚本。像这样:

#!/bin/sh

echo "ENVIRONMENT: $ENV"
sleep 1
/path/to/actual/node "$@"

这将输出传递给 Node 可执行文件的环境变量。从那里,您可以尝试取消设置任何看起来可疑的变量:

unset STRANGE_VARIABLE

在启动 Node 可执行文件之前,将它们放在上面的脚本中。

关于javascript - 创建 NodeJS + Redis 应用程序导致错误,退出代码为 139,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14116315/

相关文章:

javascript - 收到 _POST_ORDER_FULFILLMENT_DATA_ 的签名错误

javascript - javascript toString() 中的不同分隔符

nosql - NoSQL 数据库如何在聚合函数(AVG、SUM 等)上执行

node.js - 在 Node js 中处理多人游戏的超时。

php - 使用 jQuery 检查单选按钮的值并更改 CSS 类

javascript - 录制音频NodeJS

node.js - HTTP 1.1 网关超时 504

javascript - 在 node.js 中使用带有流的 promise

ruby-on-rails - 当为 kvs 使用 redis 时,使用 1 db 或不同的是很快的

javascript - 添加动态二类Jquery