Javascript 在Express JS中,静态文件不在子路由中工作
我使用快速生成器生成了项目结构 在app.js中,我有以下代码:Javascript 在Express JS中,静态文件不在子路由中工作,javascript,node.js,express,routes,javascript-objects,Javascript,Node.js,Express,Routes,Javascript Objects,我使用快速生成器生成了项目结构 在app.js中,我有以下代码: var createError = require('http-errors'); var express = require('express'); var path = require('path'); var cookieParser = require('cookie-parser'); var logger = require('morgan'); var minifyHTML = require('express-mi
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var minifyHTML = require('express-minify-html');
var minify = require('express-minify');
var indexRouter = require('./routes/index');
var aboutRouter = require('./routes/about');
var productsRouter = require('./routes/products');
var contactRouter = require('./routes/contact');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
// Minifying HTML Code
app.use(minifyHTML({
override: true,
exception_url: false,
htmlMinifier: {
removeComments: true,
collapseWhitespace: true,
collapseBooleanAttributes: true,
removeAttributeQuotes: true,
removeEmptyAttributes: true,
minifyJS: true
}
}));
//Minifying JS Code
app.use(minify({
cache: false,
uglifyJsModule: null,
errorHandler: null,
jsMatch: /js/,
cssMatch: /css/,
jsonMatch: /json/,
sassMatch: /scss/,
lessMatch: /less/,
stylusMatch: /stylus/,
coffeeScriptMatch: /coffeescript/,
}));
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/about-us', aboutRouter);
app.use('/products', productsRouter);
app.use('/contact-us', contactRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/hospital-cubical-track-system', function(req, res, next) {
res.render('products/hospital-cubical-track-system', { title : 'Hospital Cubical Track System'});
});
router.get('/telescopic-iv-bag-hanger', function(req, res, next) {
res.render('products/telescopic-iv-bag-hanger', { title : 'Telescopic IV Bag Hanger'});
});
router.get('/wall-protection-system', function(req, res, next) {
res.render('products/wall-protection-system', { title : 'Wall Protection System'});
});
router.get('/hospital-blinds', function(req, res, next) {
res.render('products/hospital-blinds', { title : 'Hospital Blinds'});
});
router.get('/nurse-call-system', function(req, res, next) {
res.render('products/nurse-call-system', { title : 'Nurse Call System'});
});
router.get('/hospital-linen', function(req, res, next) {
res.render('products/hospital-linen', { title : 'Hospital Linen'});
});
module.exports = router;
在productsRouter中,我有以下代码:
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var minifyHTML = require('express-minify-html');
var minify = require('express-minify');
var indexRouter = require('./routes/index');
var aboutRouter = require('./routes/about');
var productsRouter = require('./routes/products');
var contactRouter = require('./routes/contact');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
// Minifying HTML Code
app.use(minifyHTML({
override: true,
exception_url: false,
htmlMinifier: {
removeComments: true,
collapseWhitespace: true,
collapseBooleanAttributes: true,
removeAttributeQuotes: true,
removeEmptyAttributes: true,
minifyJS: true
}
}));
//Minifying JS Code
app.use(minify({
cache: false,
uglifyJsModule: null,
errorHandler: null,
jsMatch: /js/,
cssMatch: /css/,
jsonMatch: /json/,
sassMatch: /scss/,
lessMatch: /less/,
stylusMatch: /stylus/,
coffeeScriptMatch: /coffeescript/,
}));
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/about-us', aboutRouter);
app.use('/products', productsRouter);
app.use('/contact-us', contactRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/hospital-cubical-track-system', function(req, res, next) {
res.render('products/hospital-cubical-track-system', { title : 'Hospital Cubical Track System'});
});
router.get('/telescopic-iv-bag-hanger', function(req, res, next) {
res.render('products/telescopic-iv-bag-hanger', { title : 'Telescopic IV Bag Hanger'});
});
router.get('/wall-protection-system', function(req, res, next) {
res.render('products/wall-protection-system', { title : 'Wall Protection System'});
});
router.get('/hospital-blinds', function(req, res, next) {
res.render('products/hospital-blinds', { title : 'Hospital Blinds'});
});
router.get('/nurse-call-system', function(req, res, next) {
res.render('products/nurse-call-system', { title : 'Nurse Call System'});
});
router.get('/hospital-linen', function(req, res, next) {
res.render('products/hospital-linen', { title : 'Hospital Linen'});
});
module.exports = router;
现在在“产品/医院立体轨道系统”这样的子路径上,设计的静态css文件没有加载,而在“/,/about,/contact”上加载css js静态文件很好。
请帮助我从评论中可以看出,您似乎在使用html页面中资产文件的相对引用,而您应该使用绝对引用 因此,与其使用:
<link rel="stylesheet" type="text/css" href="css/style.css" />
你应使用:
<link rel="stylesheet" type="text/css" href="/css/style.css" />
注意开头的
/
指示使用网站的根目录。有关更多信息,请参阅。您可以尝试app.use(express.static(path.join(uu dirname,../public))代码>谢谢您的回复,但您的方法将不起作用。/public
会在根路由器中产生问题,例如/about使用绝对路径而不是相对路径应该可以解决这个问题<代码>应用程序使用(express.static(u dirname+/public))代码>参考:您是对的,但它不提供路由子路由上的静态文件。您是否使用资产文件的相对参考?这似乎是错的。因此,您应该使用
而不是
(注意开头的/
指示使用网站的根目录。有关更多信息,请参阅)。