为什么Express在URLpath深度超过两级时会在错误的位置查找静态文件?

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 ,这个文件甚至不存在。

这是地图function。 它来自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; } } } 

请求错误的文件应该是浏览器,而不是表示,表示是服务器。 所以你的客户端的html可能是错误的,可能它会尝试去../../assets/css这是正确的,当你的URL是/seller/password/因为它有2个级别,你的css请求有2个up-directories但是,当你的URL是/seller/password/forgot它试图去2层,它现在在/seller所以它追加/assets/css之后。