快速路由器ID问题-将文本读取为ID



所以我有两条路线,在每条路线之后,你可以键入一个ID,并获得该餐厅的特定ID(忽略所有拼写错误。我知道(,

如果我键入/all,就好像它试图获得/all作为ID。

我确信这是一件小事,我知道在两条路线上都能得到身份证是很奇怪的,但是。。不管怎样,我是Express的新手,JS一般只需要8周的编程时间。

resaruants.js路线-

const express = require('express'),
router = express.Router(),
restaruantModel = require('../models/restaruantModel');
router.get('/:rid?', async (req, res) => {
const { rid } = req.params;
let restaruantData = [];
if (!!rid) {
restaruantData = await restaruantModel.getById(rid);
} else {
restaruantData = await restaruantModel.getAll();
};
res.render ('template', {
locals: {
title: 'Restaruants',
dataArray: restaruantData
},
partials : {
partial: 'partial-index'
}
});
});
module.exports = router;

allTheRestaruants.js(拼写很难(-路由器:

const express = require('express'),
router = express.Router(),
restaruantModel = require('../models/restaruantModel');
router.get('/:id?', async (req, res) => {
const { id } = req.params;
let restaruantData = [];
if (!!id) {
restaruantData = await restaruantModel.getById(id);
} else {
restaruantData = await restaruantModel.getAll();
};

res.render ('template', {
locals: {
title: 'All The Restaruants',
dataArray: restaruantData
},
partials : {
partial: 'partial-all'
}
});
});
module.exports = router;

我已经缩小了代码范围。。我很确定会按我的路线走。

TLDR;

/all路由不起作用,从索引中读取"all"作为ID。按ID搜索确实有效。

您不能有相同的路由和相同的选项resaruants.js路由与allTheRestaruants.js完全相同

只有当

const resRoute = require('./routes/resaruants')
const resAllRoute = require('./routes/allTheRestaruants')
...
app.use('/restaurant', resRoute)
app.use('/restaurant-all', resAllRoute)

给你2条路线。

但是,我假设你正在尝试做一个REST API,其想法是,当你不传递id时,你会自动获得所有,所以不需要指定所有,例如:

一个简单的restaurants.js路由文件

const router = require('express').Router();
const restaruantModel = require('../models/restaruantModel');
const sendData = (res, dataArray, title) => {
res.render ('template', {
locals: {
title,
dataArray
},
partials : {
partial: 'partial-all'
}
});
}
const getAll = async (req, res) => {
const data = await restaruantModel.getAll();
sendData(res, data, 'All The Restaruants')
}
const getById = async (req, res) => {
const { id } = req.params;
const data = await restaruantModel.getById(id);
sendData(res, data, 'Restaruant #' + id)
}
router.get('/restaurants', getAll)
router.get('/restaurants/:id', getById)
module.exports = router;

它更容易阅读,并且你做了一些你应该始终瞄准的事情:关注点的分离

这样,一个GET /restaurants会得到所有的(你最好稍后也添加分页(,而GET /restaurants/23只会得到餐厅#23…


BTW,如果你使用Visual Studio,因为英语不是我的母语,我喜欢用英语写代码,所以所有人都可以阅读属性,我使用代码拼写检查器插件:(

最新更新