运行简单nodejs脚本

时间:2016-10-28 19:51:55

标签: node.js linux ubuntu

我试图在Ubuntu 14.04上运行一个简单的nodejs脚本,其内容如下:

http = require('http');

http.createServer(function(req, res){
  res.writeHead(200, {'Content-Type': 'text/plain' });
  res.end('Hello World \n');
}).listen(80, '127.0.0.1');

我已通过说明found here安装了NodeJ。以下是我从该链接中摘录的摘录:

  

选项2:使用Ubuntu软件包管理器安装Node.js

     

要安装Node.js,请在终端中键入以下命令:

     

sudo apt-get install nodejs

     

然后安装Node包管理器,npm:

     

sudo apt-get install npm

     

为节点创建符号链接,因为许多Node.js工具使用此名称来执行。

     

sudo ln -s /usr/bin/nodejs /usr/bin/node

我做到了,确认已安装了两个软件包:

enter image description here

但我无法使用我的.node文件而不抱怨此错误:

user@host:/var/www/html/nodetest$ node test.node

module.js:356
  Module._extensions[extension](this, filename);
                               ^
Error: /var/www/html/nodetest/test.node: invalid ELF header
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:945:3

我已经卸载并重新安装了节点以及npm,但它仍然无法工作......我正在运行Ubuntu 14.04 LTS 64位。

更多信息:

我决定从源代码构建并在从https://github.com/nodejs/node.git克隆master并构建它然后运行相同的脚本后,这就是我得到的错误:

user@host:/var/www/html/nodetest$ ~/node/node test.node
module.js:600
  return process.dlopen(module, path._makeLong(filename));
                 ^

Error: /var/www/html/nodetest/test.node: invalid ELF header
    at Object.Module._extensions..node (module.js:600:18)
    at Module.load (module.js:490:32)
    at tryModuleLoad (module.js:449:12)
    at Function.Module._load (module.js:441:3)
    at Module.runMain (module.js:607:10)
    at run (bootstrap_node.js:414:7)
    at startup (bootstrap_node.js:139:9)
    at bootstrap_node.js:529:3

显然,使用不同的堆栈跟踪会出现同样的错误。

是什么给出了?

1 个答案:

答案 0 :(得分:3)

Welp,这很令人尴尬(实际上,有点令人愤怒)。

  

无效的ELF标题

只是NodeJS的一种奇特方式,告诉我文件的扩展名不正确。

我跑了

mv test.node test.js

重命名文件,现在可以正常工作了。由于错误的错误消息,这是两天非常烦人的浪费。

robertklep在评论中的进一步解释:

  

文件extension.node对Node有特殊意义,正如它所假设的那样   用于本机(编译)插件。   " ELF标题"部分是指动态加载器如何   (错误的堆栈跟踪中的process.dlopen())标识a   file是一个已编译的插件。因为你正在为它提供一个JS文件,所以   识别失败,因此"无效的ELF标题"。那不是说   关于JS文件的任何事情,在你之后工作得很好   重命名了。