我正在尝试运行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中的最新代码。
我该怎么做才能正确运行这个示例应用程序?
提前感谢。
答案 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) {...}