Express вопрос об идентификаторе маршрутизатора - чтение текста как идентификатора - PullRequest
0 голосов
/ 03 марта 2020

Таким образом, у меня есть два маршрута, где после каждого маршрута вы можете ввести идентификатор и получить указанный c идентификатор этого ресторана (игнорируйте все опечатки. Я знаю) назад,

Если я наберу / все, как будто он пытается получить / все как идентификатор ..

Я уверен, что это что-то маленькое, и я знаю, что странно, чтобы получить идентификатор из обоих маршрутов, но .. что бы я ни Я новичок в Express, и хорошо JS всего лишь около 8 недель в кодировании в целом.

resaruants. js route -

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;

/ весь маршрут не работает, считывая «все» как идентификатор из индекса. Поиск по идентификатору работает, хотя.

1 Ответ

1 голос
/ 03 марта 2020

Вы не можете иметь один и тот же маршрут с тем же параметром 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, так как Engli sh не является моим родным языком, и я люблю писать код на Engli sh, чтобы все могли читать свойства, я использую Проверка орфографии кода plugin:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...