在express js中路由子path后找不到资源404

它可能看起来很傻,但我无法find一个适当的答案。 我正在尝试处理一个请求与快速Js PARAMS:

app.get('/status/:id', function(req, res, next) { var par = req.params.id; . . . res.render('profile', {xxx: par}); }); 

但问题是资源不加载,我得到我的静态资源的404错误。

错误:

GET /status/stylesheets/style.css 404 31.761 ms – 3296 GET /status/stylesheets/customize.css 404 53.355 ms – 3296 GET /status/javascripts/signup.js 404 91.891 ms – 3296 GET / images / Lizofile-white。 png 304 0.564 ms – – GET /images/profile.png 304 0.769 ms – – GET /images/comment.png 304 0.485 ms – – GET /images/achievements.png 304 0.511 ms – – GET /images/score.png 304 0.641 ms – – GET /images/friends.png 304 0.512 ms – – GET /status/stylesheets/style.css 404 24.126 ms – 3296 GET /status/stylesheets/customize.css 404 15.016 ms – 3296 GET / status / javascripts / signup.js 404 16.238 ms – 3296

我可以看到在我的资源path的开始处添加了一个/ status目录。 我尝试通过修改app.use(express.static(path.join(__ dirname,'/ public')))来解决这个问题 但它没有工作。

app.js

 > var app = express(); > > > > > app.use(session({ secret: 'osjdh018013bashjdas', resave: false, > saveUninitialized: true })); > > > > view engine setup app.set('views', path.join(__dirname, 'views')); > app.set('view engine', 'jade'); > > > app.use(logger('dev')); app.use(bodyParser.json()); //pasrse html, > jason parser app.use(bodyParser.urlencoded({ extended: true })); > app.use(cookieParser()); app.use(express.static(path.join(__dirname, > '/public'))); > > app.use('/', index);//home app.use('/login', login); > app.use('/profile', profile);//user app.use('/register', > register);//user > > app.use(function(req, res, next) { > > res.header('Access-Control-Allow-Credentials', true); > res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); > res.header("Access-Control-Allow-Origin", "http://localhost"); > res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); > next(); }); 

我希望提前提出任何意见。

这听起来像你正在使用纯粹的相对引用您的静态文件。

如果你有这样的事情:

 <link href="stylesheets/style.css"> 

在一个URL为:

  http://somedomain.com/status/xxx 

然后,浏览器将您对stylesheets/style.css的请求看作是相对于页面的域和path进行的请求。 因此,它会将http://somedomain.com/status添加到所请求的URL的前面,并要求服务器:

 http://somedomain.com/status/stylesheets/style.css 

这不是你想要的。 相反,如果将页面中的资源引用更改为仅相对于域而不是相对path,则使用/来启动它们,如下所示:

 <link href="/stylesheets/style.css"> 

然后,只有页面域将被添加,浏览器将请求:

 http://somedomain.com/stylesheets/style.css 

这应该是你的服务器所期待的。