【问题标题】:Weird behavior using parent/child routing file使用父/子路由文件的奇怪行为
【发布时间】:2021-05-03 04:32:39
【问题描述】:

我有一个带有 TypeScript 的 Node/Express 后端。

如果我在更改并保存文件后在 Postman localhost:8000/ 中运行根路由,我会得到正确的响应。但是,如果我在更改和保存文件后运行 localhost:8000/user,我会收到自动 404 HTML 响应。

只有当我首先运行根路由并且然后运行子路由,它才有效。

我在这里做错了什么?

index.ts

// External
import express from 'express';
import mongoose from 'mongoose';
import bodyParser from 'body-parser';

// Internal
import { uri } from '../backend/config/dbConsts';
import masterRoute from './api/masterRoute';

module.exports.mongoose = mongoose;

const app = express();
const PORT = 8000;

app.use(bodyParser.urlencoded({ extended: true }));

// Defines the routes used.
app.use('/', masterRoute);

app.listen(PORT, () => {
  console.log(`⚡️[server]: Server is running at https://localhost:${PORT}`);

  mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true });
  var db = mongoose.connection;
  db.on('error', console.error.bind(console, 'MongoDB connection error:'));
});

export default app;

masterRoute.ts

import express, { Router } from 'express';
import userRoute from './routes/user.route';
const router: Router = express.Router();

router.get('/', async (req, res, next) => {
  router.use('/user', userRoute);
  
  // Returning 400 here since all requests must enter into an actual routing file.
  res.status(400).send('Bad route. masterRouter.');
});

export default router;

userRoute.ts

import express, { Router } from 'express';
const router: Router = express.Router();
import userController from '../../controllers/user.controller';

router.get('/', async (req, res, next) => {
  try {
    const users = await userController.getAllUsers();
    res.status(200).send(users);
  } catch (err) {
    next(err);
  }

});

});

export default router;

【问题讨论】:

    标签: javascript node.js typescript express routes


    【解决方案1】:

    我发现了我的问题。我错误地设计了路由系统。

    我完全删除了主路由文件。这是更新的index.ts 文件(所有其他文件不再需要并被删除)。

    // External
    import express from 'express';
    import mongoose from 'mongoose';
    import bodyParser from 'body-parser';
    
    // Internal
    import { uri } from '../backend/config/dbConsts';
    import masterRoute from './api/masterRoute';
    
    module.exports.mongoose = mongoose;
    
    const app = express();
    const PORT = 8000;
    
    app.use(bodyParser.urlencoded({ extended: true }));
    
    // Defines the routes used.
    app.use('/', userRoute);
    app.use('/second', secondRoute);
    
    app.listen(PORT, () => {
      console.log(`⚡️[server]: Server is running at https://localhost:${PORT}`);
    
      mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true });
      var db = mongoose.connection;
      db.on('error', console.error.bind(console, 'MongoDB connection error:'));
    });
    
    export default app;
    

    【讨论】:

      猜你喜欢
      • 2012-06-28
      • 2014-10-23
      • 2017-09-01
      • 2016-09-25
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多