2

Express 版本是最新的。

这是 app.js 文件,它被另一个 app.js 文件使用:

"use strict";
var express = require('express'), engine = require('ejs-locals');
var path = require('path'), map = require('../../app').map;
var register = require('./routes/register').register;   
var profile = require('./routes/profile').profile;      
var login = require('./routes/login').login;            

var app = module.exports = express();
app.configure(function() {
    app.engine('ejs', engine);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'ejs');
    app.use('/assets', express.static(path.join(__dirname, 'assets')));
});

app.configure('development', function() {
    app.use(express.errorHandler());
});

app.map = map;
app.map(app, {
    '/seller': {
        '/password': {
            get: login.forgot, // Looks in the correct place /assets/css/... etc.
            '/forgot': {
                get: login.forgot // Looks in wrong place /seller/assets/... etc.
            },
            '/reset': {
                get: login.reset
            }
        }
    }
});

当请求 GET 时http://localhost:3000/seller/password,Express 在正确的位置查找静态文件,即/assets/css/

但是当请求 GET 时http://localhost:3000/seller/password/forgot,Express 会在错误的位置查找静态文件,即/seller/assets/css,它甚至不存在。

这是地图功能。它取自 Express路线图示例

function route_map(app, a, route) {
    route = route || '';
    for (var key in a) {
        switch (typeof a[key]) {
            case 'object': // { '/path': { ... }}
            app.map(app, a[key], route + key);
            break;
            case 'function': // get: function(){ ... }
            app[key](route, a[key]);
            break;
        }
    }
}
4

1 回答 1

3

请求错误文件的东西应该是浏览器,而不是快递,快递是服务器。因此,您的客户端 html 可能是错误的,当您的 URL 有 2 个级别并且您的 css 请求有 2 个向上目录时,它可能会尝试../../assets/css正确,/seller/password/但是,当您的 URL 是时,/seller/password/forgot它会尝试向上 2 级它现在在,/seller所以它在/assets/css后面附加。

于 2013-03-02T20:50:41.253 回答