改了个应用 http://docview.cnodejs.net/, 部署时候被目录问题折腾几个小时
我要用 fs.readdir
读取当前目录返回网页, 子目录都没问题了, 根目录解不出来
中间因为 console.log
和 throw Error
都看不到… 绕来绕去用页面把结果返回来
最后发现有这个奇怪的东西, 难道是版本的原因吗? 还是触犯了什么限制?
新建了一个测试的, 代码如下:
(require('http')).createServer(function(req, res) {
require('fs').readdir('.', function(err, list) {
res.write(String(err)+'\n');
res.write(String(list)+'\n');
res.write(String(require('path').existsSync('.')));
return res.end();
});
}).listen(80);
返回的结果是
Error: ENOENT, No such file or directory '.'
undefined
true
目录换成了 __dirname+'/'
null
package.json,.nae.tmp,config.js,t,.naeindex,server.js
true
目录换成 __dirname
Error: ENOENT, No such file or directory '/home/admin/cnae/git/cnode-app-engine/apps_online/readdir'
undefined
true
不要用 . ,要么用 process.cwd() 要么 __dirname, cwd代表当前工作目录, __dirname代表当前文件目录, __dirname不是一个global,而是每个文件私有.
__dirname
后面好像是没有 ‘/’
比如
var uploadRoot = __dirname;
var filename = uploadRoot + 'abc.png’
那filename将会是 /var/www/approotabc.png
但我们希望的是 /var/www/approot/abc.png
所以就写成
var uploadRoot = __dirname + ‘/’;
var filename = uploadRoot + 'abc.png’
这样就算是多了个 ‘/’, 也会是 /var/www/approot//abc.png
同样合法. 算是一种编码习惯吧.
另外关于.
为什么会提示没有的问题, 个人猜测可能是没有读权限导致的.
@jiyinyiyong 有道理