我尝试在Ubuntu 14.04 LTS上运行server:node app.js,然后收到此错误:

/home/ubuntu/Ytutor_Server/node_modules/mongodb-core/lib/topologies/shared.js:18
var nodejsversion = f('Node.js %s, %s', process.version, os.endianness());
                                                            ^
TypeError: Object #<Object> has no method 'endianness'
    at Object.<anonymous> (/home/ubuntu/Ytutor_Server/node_modules/mongodb-core/lib/topologies/shared.js:18:61)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/home/ubuntu/Ytutor_Server/node_modules/mongodb-core/lib/connection/pool.js:11:12)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)


我不知道这是怎么了。我使用Nodejs v6.9和Mongodb v3.2.11,它应该具有内容为'endianness'的模块os?

最佳答案

问题是正在使用旧版本的节点运行脚本(在这种情况下为v0.10之前的版本)。 os.endianness()已添加到节点v0.10.0(技术上为v0.9.x)中。

在Linux上分开使用nodenodejs二进制文件的原因是,某些发行版(即基于Debian的发行版)这样做是为了避免软件包名称冲突。在node.js之前,业余无线电包已经使用了“ node”包名称,因此当Debian正式打包node.js时,他们选择了其他名称(“ nodejs”)而不是替换现有的“ node”包。为了使事情进一步混乱,两个软件包都使用相同的二进制名称,因此还必须进行更改以避免任何潜在的混乱。尽管对于使用node二进制名称的shebang来说,这确实存在一些问题。

由于大多数开发人员不使用“节点”业余无线电程序包,因此解决整个node / nodejs命名问题的一种流行解决方案是仅使用第三方存储库(例如NodeSource's),该第三方存储库不仅提供最新版本的节点,但它们在软件包中也使用“节点”二进制名称。

关于node.js - Node.js:TypeError:对象#<Object>没有方法'endianness',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41201742/

10-16 19:52