我正在努力让this AMQP example致力于OSX。我做了什么:
$ npm install amqplib
$ npm list
/Users/andrewendt/tmp/amqplib
└─┬ amqplib@0.3.2
├── bitsyntax@0.0.4
├── buffer-more-ints@0.0.2
├─┬ readable-stream@1.1.13
│ ├── core-util-is@1.0.1
│ ├── inherits@2.0.1
│ ├── isarray@0.0.1
│ └── string_decoder@0.10.31
└── when@3.6.4
示例send.js
以:
var amqp = require('amqplib');
var when = require('when');
我收到此错误:
$ node send.js
module.js:338
throw err;
^
Error: Cannot find module 'when'
at Function.Module._resolveFilename (module.js:336:15)
at Function.Module._load (module.js:278:25)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (/Users/andrewendt/tmp/amqplib/send.js:4:12)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
注意:我可以require('amqplib');
就好了。我可以使用交互式控制台重现这一点。
我完全难过了。为什么Node.js在 找到的东西的依赖项时找不到它?
答案 0 :(得分:4)
节点没有那样工作。它正在查找when
,因此它会查找脚本的当前工作目录,并遍历图表直到全局安装。在寻找when
时,它不会查看您的某个依赖项,看看它是否存在机会。除此之外,如果你有不同版本的when
的多个依赖项,它会使用哪一个呢?要使其正常工作,您需要在package.json中指定when
并安装它才能使用它。
答案 1 :(得分:1)
尝试查找模块when
,节点从您当前的dir追加/node_modules
到它的根目录。它不会在其他模块的依赖项中查找when
模块。
答案 2 :(得分:0)
似乎“when”模块在项目文件夹中不可用。在项目文件夹中运行exports.update = function(req, res) {
if(req.body._id) { delete req.body._id; }
Thing.findById(req.params.id, function (err, thing) {
if (err) { return handleError(res, err); }
if(!thing) { return res.status(404).send('Not Found'); }
var updated = _.merge(thing, req.body);
updated.save(function (err) {
if (err) { return handleError(res, err); }
return res.status(200).json(thing);
});
});
};
。这应该可以解决问题。