【问题标题】:use express nodejs rest api boilerplate to create new route使用 express nodejs rest api 样板创建新路由
【发布时间】:2020-01-31 13:41:26
【问题描述】:

我是 expressjs 的新手,我打算在我的 rest api 项目中使用this 样板。 我想知道如何扩展现有路由以更新或创建 rest api。 如果我运行适用于http://localhost:8080/api/facets/ 的代码,开箱即用 我想像http://localhost:8080/api/facets/createhttp://localhost:8080/api/facets/list这样扩展路线

我对文件感到困惑 express-es6-rest-api/src/api/index.js 和 express-es6-rest-api/src/api/facets.js

请解释以下代码:

export default ({ config, db }) => {
    let api = Router();
    // mount the facets resource
    api.use('/facets', facets({ config}));
    // perhaps expose some API metadata at the root
    api.get('/', (req, res) => {
        console.log(api)
        res.json({ version });
    });


 return api;
}

【问题讨论】:

    标签: javascript node.js rest express


    【解决方案1】:

    我建议你在 src/api 中创建另一个 facets 文件,并尝试创建你自己的 express 路由器,而不需要像“resource-router-middleware”这样的库。

    请阅读https://expressjs.com/en/guide/routing.html

    在这里,您可以看到创建另一个快速路由器是多么容易,您可以在index.js 中导入并使用基于“resource-router-middleware”的现有路由器。这样您就可以完全控制路线,包括您想要的任何名称。

    我将通过 repo 中最简单的路线快速举例说明我的意思:

    import { Router } from 'express'
    
    let router = Router()
    
    router.get('/get', (req, res) => {
        res.json(facets)
    })
    
    export default router
    

    如果你在 "index.js" 中导入这个路由器并在里面使用它: "api.use('/facets, newFacetsRou​​ter)" 其中 newFacetsRou​​ter 是从上面导入的路由器,你会看到你现在可以调用 @ 987654324@ 而不是之前的 GET "/facets"。您可以使用以下模式继续我为所有方法发布的代码:

    router.["HTTP METHOD"]('/["ROUTE NAME"]', callback)
    

    其中“HTTP METHOD”可以是:“get、post、put、delete”。 “ROUTE NAME”是你想要的任何东西。而回调是http调用成功后执行的函数。

    关于您发布的代码,您希望对其进行解释:它只是一个快速路由器,我们在其中导入另一个快速路由器,请再次阅读有关路由的快速文档。

    【讨论】:

    • 在提到的样板库中,你能解释一下代码 /** POST / - 创建一个新实体 */ create({ body }, res) { body.id = facets.length.toString (36); facets.push(body); res.json(正文); },请在 facets.js 中,如果我想在路由器中使用它,我该怎么做。
    • 是的。那是 POST /facets 路由的回调函数。它需要 2 个参数:(req, res) = (request, response)。作者使用 { body } 而不是 req。那是解构。他这样做是因为他只需要请求正文中的正文参数。此回调函数将新创建的构面添加到构面数组中,并返回新创建的构面。根据我的回答,您可以这样写: router.post('/create', (req, res) => { let body = { req } body.id = facets.length.toString(36); facets.push(正文);res.json(正文);}
    • 我理解您的回答并且完全可以正常工作,谢谢。但是如果我想按照作者代码使用创建路由,我该怎么做。你能解释一下吗?
    • 我认为你不能(基于我对该库的准备),老实说,我发现使用它并没有太多好处。我是一名 node.js 开发人员,我个人不记得在生产中看到过任何类型的此类库。如果您真的想使用“resource-router-middleware”创建路由,则必须使用默认路由名称。
    • 对不起,我的意思是默认的“/”路由名称。这意味着如果您的快速路由器正在使用使用“resource-router-middleware”创建的路由器,例如: api.use('/facets', facets({ config, db })) 您的路由名称将仅基于您使用的内容在主路由器(“/facets”)上,您导入的路由器将具有“/”所有路由的默认路由名称,并且仅通过 http 方法(get、post、put、delete)来区分。
    【解决方案2】:

    很难掌握您真正需要帮助的地方。您是否需要帮助理解项目和代码,或者您想了解如何为您的 API 创建新的端点?因此,让我向您展示一个简单的小 CRUD api,用于写出的方面。

    安装 express 和正文解析器

    npm i -S express
    npm i -S body-parser
    

    设置服务器,添加正文解析器并注册您希望使用的端点。

    const express = require('express');
    const json = require('body-parser');
    
    const facets = [];
    
    const app = express();
    app.use(json());
    
    app.get('/api/facets', (req, res) => {
        res.send(facets);
    });
    
    app.post('/api/facets', (req, res) => {
        facets.push(req.body);
        res.send(req.body);
    });
    
    app.put('/api/facets/:index', (req, res) => {
        facets[req.param.index] = req.body;
        res.send(req.body);
    });
    
    app.delete('/api/facets/:index', ((req, res) => {
        facets.splice(req.param.index, 1);
        res.send(facets);
    }));
    
    app.listen(1337, () => {
        console.log('Server is runing');
    });
    

    【讨论】:

    • 我需要了解项目,在 facets.js 文件中,我如何扩展不同的路线。
    猜你喜欢
    • 2017-11-18
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 2022-01-04
    • 2013-05-24
    相关资源
    最近更新 更多