Route 在错误的位置查找静态文件
Route looks for statics files in the wrong place
出于某种原因,我有一个特定的路由 /admins/:id
,它在 /public/admins/
而不是 /public/
中查找静态文件。这会导致 404 错误,并且不会为此页面加载 js 和 css 文件。所有其他路由在 /public/
中查找静态文件。自从我开始编写应用程序以来,我从未更改过用于提供静态文件的中间件,所以我不知道错误代码可能在哪里。
例如,它在应该寻找 /stylesheets/bootstrap.min.css
.
的时候寻找 /admins/stylesheets/bootstrap.min.css
app.js
var express = require('express');
var stormpath = require('express-stormpath');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
// include routes
var mainPage = require('./routes/mainPage');
var admins = require('./routes/admin');
var addAdmin = require('./routes/addAdmin');
var addDev = require('./routes/addDev');
var adminProfile = require('./routes/adminProfile');
var devs = require('./routes/dev');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// routes
app.use('/', mainPage);
app.use('/api/admins', admins);
app.use('/addAdmin', addAdmin);
app.use('/addDev', addDev);
app.use('/admins', adminProfile);
app.use('/api/devs', devs);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
module.exports = app;
adminProfile.js
var Admin = require('../models').sequelize.models.Admin;
var express = require('express');
var router = express.Router();
router.get('/:id', function(req, res, next) {
Admin.findOne({
where: {
id: req.params.id,
}
})
.then(function(admin) {
if(!admin) {
var err = new Error('Not Found');
err.status = 404;
res.render('error', { error: err });
} else
res.render('adminProfile', { admin: admin });
});
});
module.exports = router;
您的 <link>
标签在 HTML 中是什么样子的?您可能需要通过在开头放置 /
来锚定 href
属性,如下所示:
<link type="text/css" href="/stylesheets/bootstrap.min.css" />
这将创建一个根相对 URL。参见 Having links relative to root?
出于某种原因,我有一个特定的路由 /admins/:id
,它在 /public/admins/
而不是 /public/
中查找静态文件。这会导致 404 错误,并且不会为此页面加载 js 和 css 文件。所有其他路由在 /public/
中查找静态文件。自从我开始编写应用程序以来,我从未更改过用于提供静态文件的中间件,所以我不知道错误代码可能在哪里。
例如,它在应该寻找 /stylesheets/bootstrap.min.css
.
/admins/stylesheets/bootstrap.min.css
app.js
var express = require('express');
var stormpath = require('express-stormpath');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
// include routes
var mainPage = require('./routes/mainPage');
var admins = require('./routes/admin');
var addAdmin = require('./routes/addAdmin');
var addDev = require('./routes/addDev');
var adminProfile = require('./routes/adminProfile');
var devs = require('./routes/dev');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// routes
app.use('/', mainPage);
app.use('/api/admins', admins);
app.use('/addAdmin', addAdmin);
app.use('/addDev', addDev);
app.use('/admins', adminProfile);
app.use('/api/devs', devs);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
module.exports = app;
adminProfile.js
var Admin = require('../models').sequelize.models.Admin;
var express = require('express');
var router = express.Router();
router.get('/:id', function(req, res, next) {
Admin.findOne({
where: {
id: req.params.id,
}
})
.then(function(admin) {
if(!admin) {
var err = new Error('Not Found');
err.status = 404;
res.render('error', { error: err });
} else
res.render('adminProfile', { admin: admin });
});
});
module.exports = router;
您的 <link>
标签在 HTML 中是什么样子的?您可能需要通过在开头放置 /
来锚定 href
属性,如下所示:
<link type="text/css" href="/stylesheets/bootstrap.min.css" />
这将创建一个根相对 URL。参见 Having links relative to root?