Node.js TypeError:object不是函数

时间:2013-01-30 16:26:59

标签: node.js mongodb

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

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)

我正在运行book's repo中的最新代码。

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

提前感谢。

2 个答案:

答案 0 :(得分:8)

.js目录中可能有routes个文件未导出函数。

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

module.exports = function(app, models) {
  // Add this file's routes using app.get, etc. calls.
  ...
};

答案 1 :(得分:1)

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

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

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

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