javascript - 使用父/子路由文件的奇怪行为
问题描述
我有一个带有 TypeScript 的 Node/Express 后端。
如果我在更改和保存文件后在 Postman 中运行根路由,localhost:8000/
我会得到正确的响应。但是,如果我localhost:8000/user
在更改并保存文件后运行,我会收到自动 404 HTML 响应。
只有当我首先运行根路由然后才运行子路由时,它才有效。
我在这里做错了什么?
索引.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;
主路由.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;
用户路由.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;
解决方案
我想出了我的问题。我错误地设计了路由系统。
我完全删除了主路由文件。这是更新的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;
推荐阅读
- libgdx - LibGDX ModelInstance - can't reset scale, setting the transform while scaled deforms the model
- python - 如何突出显示绘图中的区域以指示 Python 中的滑动窗口?
- jquery - Resetting Modal Wizard to Original State When Input Field Clicked
- reactjs - 删除具有相同组件名称的先前形状组件时如何避免形状改变大小和位置?康瓦
- gmail - Attached EML files in emails sent via GMAIL-APIs are not viewable in GMAIL
- typescript - 打字稿:是否可以关闭函数重载的类型参数?(帖子中的示例)
- python - 使用 PyParsing 的两个标记之间的字符串
- typescript - How can I apply a utility function to a supertype's parameter of a generic type
- wpf - Trying to hide a checkbox until a menu option is selected, but checkbox won't hide
- android - tracking bugs in release like debug mode