javascript - Express 路由器 ID 问题 - 读取文本作为 ID

标签 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;

我已经缩小了代码范围。我很确定在我的 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/

相关文章:

node.js - 与 MongoDB 而不是 Redis 一起使用的 Kue 有什么好的替代品?

javascript - 如何使用 jQuery - .html 打印数组中的值

javascript - 多维数组问题

javascript - 为什么 IE 不支持我的输入字段中的特殊字符阻止脚本?

javascript - 如何使用经过身份验证的 id token 和数据库规则保护 Firebase Cloud Function HTTP 端点?

node.js - 在后期构建时从 Visual Studio 运行 Gulp 结果不一致

node.js - Express.js 使用 Router vs App.use 路由的好处?

javascript - 使用 Jade 的 :markdown filter? 时是否可以包含外部文件

javascript - 将 Node Express 服务器上长时间运行的异步函数的进度数据发送到 React 客户端

javascript - express + Passport ,错误: can't post request to passport and not throw any error