无法从另一个模块设置express.static

时间:2016-01-18 15:49:01

标签: node.js express

这有效

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

在我的浏览器上,控制台没有错误。

1 个答案:

答案 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.jsrequire other.js移到另一个文件夹中一样不能正确解决

path.resolve here

上的信息