我正在使用ubuntu并且我正在尝试使用nodejs运行脚本,我收到此错误。
/home/bebz/Documents/test# node server.js
module.js:338
throw err;
^
Error: Cannot find module 'merge-descriptors'
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> (/home/bebz/node_modules/express/lib/express.js:6:13)
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 Module.require (module.js:365:17)
有什么问题?我在正确的目录中,我也尝试使用root运行它,但没有任何反应。
server.js内部是
// get dependencies
var app = require("express")();
// handle request and response
app.get("/", function(req, res) {
res.send({name:"Hello Wolrd"});
});
// initializing a port
app.listen( 5000);
一个简单的例子,只是为了表明node.js正在运行。
答案 0 :(得分:27)
似乎脚本具有未满足的依赖性 - 这意味着您必须首先安装模块“merge-descriptors”。
似乎脚本使用“express”(并且“merge-descriptors”实际上看起来像是“express”的依赖项) - 因为这并没有抛出错误,似乎已经安装了一些依赖项。
因此,您可以尝试通过npm install
或npm update
安装缺少的内容。
更新:根据npmjs.org“merge-descriptors”是“express”的依赖项。查看堆栈跟踪显示您已全局安装“express” - 因此您应该尝试npm update -g
如果这不能解决您的问题,您应该查看this question。
答案 1 :(得分:2)
npm update
当模块安装顺序不完美或存在多个模块时,我看到了这一点。
npm update对此进行排序,不推荐使用不正确的版本。
答案 2 :(得分:1)
每当您module.js:338 throw err;
尝试检查机器中是否安装了npm
时。
UserName$ npm -v
如果您获得版本名称,则很明显已安装npm
。
如果您没有获得版本名称,则表示您的安装存在一些问题,或者未安装。
要安装npm
,请在终端中输入以下命令:
UserName$ curl -0 -L http://npmjs.org/install.sh | sudo sh
另请注意,我在sudo
命令之前添加了sudo sh
,具体取决于您的用户权限。
答案 3 :(得分:0)
当模块名称和文件名不匹配时,会发生此错误。在为模块和文件名使用相同的名称后,它已得到解决。例如
//In JS file
var arr = [];
arr.push( $("#textZipcode").val());
arr.push( $("#textPhone").val());
arr.push($("#textAddress").val());
arr.push( $("#textMobile").val());
//You can add any number. It will store to array properly.
$.ajax({
type: "POST",
url: "HomePage.aspx/SaveData",
contentType: "application/json; charset=utf-8",
dataType: "json",
data:JSON.stringify({arr:arr}),
success: function (response) {
}});
//In C#
[WebMethod]
public static void SaveData(string[] arr)
{
}
答案 4 :(得分:0)
你应该安装merge-descriptors模块。打开终端或命令提示符并运行以下命令:
npm install --save merge-descriptors
答案 5 :(得分:0)
我也遇到了同样的问题,你应该尝试npm install,npm update也是一个选项,但是使用npm update时,最新的npm版本将安装在您的本地环境中。这对于全局项目是不希望的,因为您可能会在全局环境中发现未满足的依赖关系问题。
我建议使用npm install