Возможно ли, что один API обрабатывает несколько запросов в Node JS? - PullRequest
0 голосов
/ 14 июля 2020

Моя цель - создать 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 })

Проблема в том, что браузер не может подключиться к целевым страницам, если я не создаю совершенно новые API для каждого совпадения tableNames.

Я хочу, чтобы мой 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;

Ответы [ 2 ]

1 голос
/ 14 июля 2020
    // 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. Если вы напишете этот API перед" / table ", то ваш "/table" request также будет обрабатываться этим API.

    router.get('/:table_name', (req, res) => {
      db.loadTable(`SELECT * FROM ${req.params.table_name}`, res)
    }) 
        
    module.exports = router;
1 голос
/ 14 июля 2020
// 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;
...