ExpressJS 应用没有为嵌套路由提供正确的 public 文件
ExpressJS app not serving correct public files for nested routes
背景
所以我有一个简单的 Express 应用程序(用 express-generator 制作)具有这种结构(y 只显示相关部分):
myapp
├── app.js
├─┬ public
│ └─┬ assets
│ ├── css
│ └── js
├─┬ routes
│ └── admin.js
└─┬ views
├── layout.pug
├── admin.pug
└── process.pug
我的观点
我的layout.pug是这样的
html
head
title= title
link(rel='stylesheet', href='assets/css/main.css')
script(type="text/javascript", src="assets/js/main.js")
block imports
body
/*navigation*/
block contents
而 admin.pug 是
extends layout
block imports
script(type="text/javascript", src="assets/js/admin.js")
block contents
p Admin page
而process.pug是
extends layout
block imports
script(type="text/javascript", src="assets/js/process.js")
block contents
p Process page
p= id
我的路线
我有一个路由文件,admin.js:
var express = require('express');
var router = express.Router();
router.get('/process/:id', function(req, res, next) {
res.render('process', {
title: 'process page',
id: req.params.id
});
}
router.get('/', function(req, res, next) {
res.render('admin', {
title: 'admin page'
});
}
module.exports = router;
我的app.js
我在 app.js 文件中做的相关事情是:
var admin = require('./routes/admin');
var app = express();
app.use(express.static(path.join(__dirname, 'public')));
app.use('/admin', admin);
问题
我的应用程序正如我上面所写的那样,我的'/admin/页面运行得非常好。但是当我尝试导航到“/admin/process/id”时,它没有。它不会从我的 public 文件夹中加载任何资源。它尝试从“/admin/process/assets/”而不是“/assets/”加载。
我试过的
我对此完全迷失了,但我已经尝试了几件事。
- 在我的实际 admin.js 文件中创建一个
'/admin/process'
路由得到相同的结果(不加载资源)。
- 创建一个全新的路由文件并在app.js上使用它
app.use('/admin/process', newFile);
结果相同。
添加文件的绝对路径 -
layout.pug
link(rel='stylesheet', href='/assets/css/main.css')
script(type="text/javascript", src="/assets/js/main.js")
admin.pug
script(type="text/javascript", src="assets/js/admin.js")
process.pug
script(type="text/javascript", src="/assets/js/process.js")
背景
所以我有一个简单的 Express 应用程序(用 express-generator 制作)具有这种结构(y 只显示相关部分):
myapp
├── app.js
├─┬ public
│ └─┬ assets
│ ├── css
│ └── js
├─┬ routes
│ └── admin.js
└─┬ views
├── layout.pug
├── admin.pug
└── process.pug
我的观点
我的layout.pug是这样的
html
head
title= title
link(rel='stylesheet', href='assets/css/main.css')
script(type="text/javascript", src="assets/js/main.js")
block imports
body
/*navigation*/
block contents
而 admin.pug 是
extends layout
block imports
script(type="text/javascript", src="assets/js/admin.js")
block contents
p Admin page
而process.pug是
extends layout
block imports
script(type="text/javascript", src="assets/js/process.js")
block contents
p Process page
p= id
我的路线
我有一个路由文件,admin.js:
var express = require('express');
var router = express.Router();
router.get('/process/:id', function(req, res, next) {
res.render('process', {
title: 'process page',
id: req.params.id
});
}
router.get('/', function(req, res, next) {
res.render('admin', {
title: 'admin page'
});
}
module.exports = router;
我的app.js
我在 app.js 文件中做的相关事情是:
var admin = require('./routes/admin');
var app = express();
app.use(express.static(path.join(__dirname, 'public')));
app.use('/admin', admin);
问题
我的应用程序正如我上面所写的那样,我的'/admin/页面运行得非常好。但是当我尝试导航到“/admin/process/id”时,它没有。它不会从我的 public 文件夹中加载任何资源。它尝试从“/admin/process/assets/”而不是“/assets/”加载。
我试过的
我对此完全迷失了,但我已经尝试了几件事。
- 在我的实际 admin.js 文件中创建一个
'/admin/process'
路由得到相同的结果(不加载资源)。 - 创建一个全新的路由文件并在app.js上使用它
app.use('/admin/process', newFile);
结果相同。
添加文件的绝对路径 - layout.pug
link(rel='stylesheet', href='/assets/css/main.css')
script(type="text/javascript", src="/assets/js/main.js")
admin.pug
script(type="text/javascript", src="assets/js/admin.js")
process.pug
script(type="text/javascript", src="/assets/js/process.js")