所以我有两条路线,在每条路线之后您可以输入一个 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;
我已经缩小了代码范围。我很确定在我的 route 。
太长了;
/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,其想法是,当您传递 no 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插件:)
关于javascript - Express 路由器 ID 问题 - 读取文本作为 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60510961/