快速路由器ID问题-以ID

时间:2020-03-03 15:50:36

标签: javascript node.js express

所以我有两条路线,在每条路线之后,您可以键入一个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搜索确实可以。

1 个答案:

答案 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插件:)