首页 > 解决方案 > Node.js + Express 给我错误 - 无法获取 /

问题描述

我创建了一个简单的应用程序。在我将应用程序代码拆分为 MVC 模板之前,一切正常。下面我介绍我的应用程序的代码。转到 localhost:3000/add-service 后,您将看到无法获取 /add-service 消息。

不幸的是我无法解决的问题在哪里?

应用程序.js

const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const expressLayouts = require('express-ejs-layouts');

const adminRoutes = require('./Routes/admin');
const shopRouters = require('./Routes/shop');

const app = express();

app.use(expressLayouts);
app.set('view engine', 'ejs');
app.set('views', './views');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/add-service', adminRoutes);
app.use(shopRouters);

app.use('/', (req, res, next) => {
    res.status(404).render('./pages/404', {
        title: '404 Page Not Found',
        path: '',
    });
});

app.listen(3000);

admin.js - 这是我的路由器文件

const express = require('express');
const router = express.Router();
const bikesController = require('../controllers/bikes');

router.get('/add-service', bikesController.getAddBike);

module.exports = router;

bikes.js - 这是我的控制器

const bikes = [];

exports.getAddBike = (req, resno) => {
    res.render('../views/pages/add-service', {
        path: 'pages/add-service',
        title: 'Add in Service',
    });
};

exports.postAddBike = (req, res) => {
    bikes.push({ title: req.body.bikeModel });
    res.redirect('/');
};

exports.getBikes = (req, res) => {
    res.render('./pages/shop', {
        model: bikes,
        docTitle: 'List of Bikes',
        path: '/',
        title: 'Main Page',
    });
};

应用树

在此处输入图像描述

标签: javascriptnode.jsexpress

解决方案


app.use('/add-service', adminRoutes);

您已安装adminRoutes/add-service


router.get('/add-service', bikesController.getAddBike);

服务提供的唯一端点是/add-service

将它们结合起来,您就有了 URL: /add-service/add-service,这不是您想要的。


路由器的要点是它不需要知道它所在的上面的 URL。

路由器应该只处理它自己的 URL 层次结构部分:

 router.get('/', bikesController.getAddBike);

推荐阅读