所以我有两条路线,在每条路线之后,您可以键入一个ID,并获取该餐厅的特定ID(忽略所有拼写错误。我知道),
如果我输入/ all,就好像它试图获取/ all作为ID。
我确定这是一个很小的东西,我知道从两个路径上都获得一个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搜索确实可以。
答案 0 :(得分:1)
使用相同的选项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 ...
顺便说一句,如果您使用Visual Studio,因为英语不是我的母语,并且我喜欢用英语编写代码以便所有人都可以读取属性,所以我使用Code spell checker插件:)