3

我正在尝试运行Mike Wilson 的图书示例应用程序,但收到以下错误:

pcassiano@...:~/socialnet$ sudo node app.js

/home/pcassiano/socialnet/app.js:60
  require('./routes/' + routeName)(app, models);
                                  ^
TypeError: object is not a function
    at /home/pcassiano/socialnet/app.js:60:35
    at Array.forEach (native)
    at Object.<anonymous> (/home/pcassiano/socialnet/app.js:57:26)
    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.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

我正在运行本书 repo中的最新代码。

我应该怎么做才能正确运行这个示例应用程序?

提前致谢。

4

2 回答 2

8

您可能.jsroutes目录中有不导出函数的文件。

app.js正在调用目录require中的所有文件,routes然后将它们作为函数调用。因此,如果这些文件中的任何一个不遵循下面的一般模式,您将收到您所看到的错误:

module.exports = function(app, models) {
  // Add this file's routes using app.get, etc. calls.
  ...
};
于 2013-02-02T17:28:03.043 回答
1

错误报告的值require('./routes/' + routeName)不是函数。所以你只有一个真正可能的问题根源。

如果'./routes/'+routeName不存在,节点应该抛出一个错误(至少在 v0.8.16 中),所以不是这样。所以最明显的一个是正在加载的模块没有导出函数(如错误所示)。

您应该console.log('routeName: ', routeName)在 app.js 第 60 行的 require 语句之前运行,然后再次尝试运行它。然后,在找到 的值后routeName,查看它试图打开的文件。赔率要么module.exports是导出对象(或数组、字符串等),要么根本没有设置。

如果您在路由文件夹中添加路由,请注意遵循与作者相同的导出样式,即module.exports = function(app, models) {...}

于 2013-02-08T23:05:22.650 回答