【问题标题】:Is it possible a single API handles multiple requests in Node JS?单个 API 是否可以在 Node JS 中处理多个请求?
【发布时间】:2020-07-14 17:40:15
【问题描述】:

我的目标是创建一个处理多个请求的 API。通过这样做,我需要将一个字符串作为argument 传递给url of API,如下所示:

// index.js in client
fetch(`http://localhost:4000/routerName/${tableName}`).then()

// router.js
router.get(`/${tableName_from_client_page}`, (req, res) => { // Do Something })

一个问题是,浏览器无法连接到目标页面,除非我为每个匹配的tableNames 创建一个全新的 API。

我希望我的 API 通过接收 tableName 作为其 /url 来处理多个请求。

有什么技巧可以解决这个问题吗?

这就是我的整个路由器的样子:

// Router
const express = require('express'),
      db = require('./db.js'),
      router = express.Router();

router.get('/table', (req, res) => {
  db.loadTable('SELECT * FROM someTable', res);
}) // Handles only one request on the name of url; /table

router.get(`/${tableName_from_client_page}`, (req, res) => {
  db.loadTable(`SELECT * FROM ${tableName_from_client_page}`, res)
}) // Handles multiple requests, depending on its argument.

module.exports = router;

【问题讨论】:

标签: javascript mysql node.js api router


【解决方案1】:
// Router
const express = require('express'),
      db = require('./db.js'),
      router = express.Router();

router.get('/table', (req, res) => {
  db.loadTable('SELECT * FROM someTable', res);
}) // Handles only one request on the name of url; /table

router.get('/tables/:tableName', (req, res) => {
  db.loadTable(`SELECT * FROM ${req.params.tableName}`, res)
}) // Handles multiple requests, depending on its argument.

module.exports = router;

【讨论】:

    【解决方案2】:
        // Router
        const express = require('express'),
              db = require('./db.js'),
              router = express.Router();
    

    此 API 将只处理一个请求“/table”。

        router.get('/table', (req, res) => {
          db.loadTable('SELECT * FROM someTable', res);
        })
    

    处理多个请求结帐下面的代码 但请确保 write this API last in the route file,如果您在“/table” API 之前编写此 API,那么您的 "/table" request 也将由此 API 处理。

        router.get('/:table_name', (req, res) => {
          db.loadTable(`SELECT * FROM ${req.params.table_name}`, res)
        }) 
            
        module.exports = router;
    

    【讨论】:

    • 谢谢,但是冒号跟在表名之前是正常的吗?当我登录req.params.table_name 时,服务器会这样抛出; { table_name: ':Customer' }。我可以使用split() 删除它,但对我来说还是有点乏味。
    • 是的,如果路径中写冒号,express会识别为参数。您可以使用req.params.table_name 传递的值。请查看此链接并找到 Route parameters expressjs.com/en/guide/routing.html
    • 也许您只登录了req.params。它将给出所有 req.params 的对象。 req.params.table_name 只会给出你在请求中传递的表名。
    猜你喜欢
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    相关资源
    最近更新 更多