【发布时间】:2016-03-14 10:44:21
【问题描述】:
我的第一个节点服务器应用程序在 localhost 上运行良好,但在 digitalocean (ubuntu) 环境中我无法获得工作路径。
这一行
require("./lib/dbHelper").initilize();
产生这个错误
Error: Cannot find module './lib/dbHelper'
at Function.Module._resolveFilename (module.js:339:15)
at Function.Module._load (module.js:290:25)
at Module.require (module.js:367:17)
at require (internal/module.js:16:19)
at Object.<anonymous> (/var/www/wsApp/app.js:18:1)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
还有这一行
let User = require("../models/User");
产生这个错误
Error: Cannot find module '../models/User'
at Function.Module._resolveFilename (module.js:339:15)
at Function.Module._load (module.js:290:25)
at Module.require (module.js:367:17)
at require (internal/module.js:16:19)
at Object.<anonymous> (/var/www/wsApp/routes/auth.js:5:12)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Module.require (module.js:367:17)
我已查看此处 (https://gist.github.com/branneman/8048520) 的解决方案,并尝试了建议 3、4.2 和 6,但没有改变错误消息。
值得注意的是,这条线似乎工作正常
app.use("/", require("./routes/auth.js"));
作为节点的新手,我不太了解路径映射,最后一个会起作用而第一个不起作用似乎很奇怪,因为它们都使用点语法...
【问题讨论】:
-
添加console.log('path:', __dirname + '/lib/helper');在需要查看完整路径之前。 __dirname 是脚本所在目录的路径。因此,在您的 app.js 中,__dirname 应该是 /var/www/wsApp。我希望这可以帮助您了解 require 的工作原理。
-
单点等于写__dirname吗?
-
因为点的意思是相对于当前目录并且__dirname指向它然后是的
-
究竟是什么./lib/dbHelper是文件还是目录?如果 dir 那么这假设那里有 index.js 如果文件那么你应该使用 dbHelper.js 并且正如下面的回答中指出的那样,我建议只使用小写以避免任何区分大小写的问题。例如。
db-helper.js