ExpressJS应用程序无法为嵌套路由提供正确的公共文件

时间:2017-06-26 11:41:24

标签: node.js express router

背景

所以我有一个简单的Express应用程序(用快速生成器制作)具有这种结构(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 / page工作得非常棒。但是,当我尝试导航到'/ admin / process / id'时,它没有。它不会从我的公用文件夹加载任何资源。它试图从'/ admin / process / assets /'而不是'/ assets /'加载。

我尝试了什么

我完全迷失了,但我尝试过几件事。

  • 在我的实际admin.js文件中创建'/admin/process'路由获得相同的结果(不加载资源)。​​
  • app.use('/admin/process', newFile);的app.js上创建一个全新的路径文件和使用会产生相同的行为。

1 个答案:

答案 0 :(得分:2)

添加文件的绝对路径 - 的 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")