节点需要蓝鸟失败

时间:2016-04-18 17:28:39

标签: node.js bluebird

我正在运行node.js应用程序,出于某种原因,当需要bluebird模块require('bluebird')时,节点应用程序失败。

  • 节点版本:0.10.40
  • bluebird版本:3.3.4

这真的很奇怪,我唯一要做的就是这里的堆栈跟踪:

TypeError: Cannot call method 'split' of undefined  
    at Object.setBounds (app/node_modules/bluebird/js/release/debuggability.js:614:48)  
    at module.exports (app/node_modules/bluebird/js/release/promise.js:762:11)  
    at Object.<anonymous> (app/node_modules/bluebird/js/release/bluebird.js:9:36)  
    at Module._compile (module.js:456:26)  
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    var firstStackLines = firstLineError.stack.split("\n");

再次,该应用程序运行正常。当我添加这一行require('bluebird')时,它崩溃了,我得到了这个堆栈跟踪。关于这个错误来自何处的任何想法?

[编辑]

在第node_modules/bluebird/js/release/debuggability.js:614:48

> console.log(firstLineError);
[Error]
> console.log(firstLineError.message);

> console.log(firstLineError.stack);
undefined
> console.log(firstLineError.toString());
Error: Error
> console.log(firstLineError instanceof Error);
True

这是一个基本为空的Error对象

临时解决方案

当我将行node_modules/bluebird/js/release/debuggability.js:614更改为

var firstStackLines = (firstLineError.stack) ? firstLineError.stack.split("\n") : ""; 

和第615行到

var lastStackLines = (lastLineError.stack) ? lastLineError.stack.split("\n") : "";

它运作得很好。不确定这是否会产生持久影响

4 个答案:

答案 0 :(得分:1)

我有类似的失败,更具体地说:

.../node_modules/bluebird/js/release/debuggability.js:673
var firstStackLines = firstLineError.stack.split("\n");

将节点6.2.2与bluebird ^ 3.4.1。

一起使用时

使用节点v6.2.2升级到bluebird ^ 3.4.6有助于修复错误。

答案 1 :(得分:0)

手动删除node_modules文件夹并重新运行npm install,因为它听起来像NPM没有正确安装。

答案 2 :(得分:0)

您使用的是最新版本的Bluebird,其中包含过时的节点版本。

答案 3 :(得分:0)

我遇到的问题是我正在使用另一个正在修改pretty-error对象的模块console,因此bluebird的错误处理正在接收一个变异的console对象这不是bluebird预期的形状。