这有效
var express = require('express');
var app = express();
var request = require('request');
// initialize session, redis server will be used if it's running otherwise will store in memory
require('./config/session.js')(app, function () {
// configurations
require('./config/bodyparser.js')(app);
require('./config/cookieparser.js')(app);
require('./config/compression.js')(app);
//require('./config/other.js')(app, express);
app.use(express.static('./public', { /*maxAge: 86400000*/}));
app.listen(3000, function () { console.log('running...'); });
});
但如果我取消注释需要other.js并评论app.use它不会。这是other.js文件。
module.exports = function (app, express)
{
app.use(express.static('../public', { /*maxAge: 86400000*/}));
return app;
}
尝试了不同的亲戚路径,但都失败了。这是项目结构
-config
--other.js
-public
-app.js
我得到的错误是
Cannot GET /index.html
在我的浏览器上,控制台没有错误。
答案 0 :(得分:2)
这里的问题是当你require
other.js文件时,相对路径正在使用app.js
的cwd。避免这种情况的最佳方法(并避免相对路径的麻烦)是使用path.resolve
和__dirname
变量。
__dirname
是一个特殊的Node.js变量,它总是等于它所在文件的当前工作目录。因此,与path.resolve
结合使用,无论在哪里都可以确保文件正在require
,并且它使用正确的路径。
在other.js中:
var path = require('path');
....
app.use(express.static(path.resolve(__dirname, '../public')));
或者你可以简单地更新other.js以使用./public
,但我相信以上是更好的做法,就好像你将app.js
或require
other.js移到另一个文件夹中一样不能正确解决
path.resolve
here