Узел.JS — Как передать переменную в мою функцию API?

#node.js #express

Вопрос:

Я создал очень простой API на основе двух файлов следующим образом:

api.js

 import express from 'express'; const app = express(); import { getWhereToApi} from './lib/handlers.js'; const port = 3000;  app.get('/api/vacations', getWhereToApi);  app.listen(port, function() {  console.log(`Express started in ${app.get('env')} `    `mode on http://127.0.0.1:${port}`    `; press Ctrl-C to terminate.`)});  

handlers.js

 var whereTo = {  "GRU": {  "destinations": ["MAD", "LAX", "MEX"],},  "LAX": {  "destinations": ["NYC", "GRU", "MEX"],},  "NYC": {  "destinations": ["LAX"],}, }  export async function getWhereToApi(req, res, iata){  res.json(whereTo[iata]); }  

Я хочу каким-то образом передать IATA как var (например, «GRU»), чтобы я получил следующий результат:

 {  "destinations": [  "MAD",  "LAX",  "MEX"  ] }  

Как я могу это сделать? Спасибо!

Комментарии:

1. Откуда вы ожидаете получить эту iata ценность? В том виде, в каком вы его настроили сейчас, вы ожидаете, что Express предоставит его при вызове обработчика маршрута, но этого не произойдет так, как вы это показываете. Откуда он должен был взяться? Вы хотите, чтобы это было в URL-адресе? Если да, покажите, как вы этого хотите, в URL-адресе?

2. Спасибо за комментарий. Например, из строки запроса? 127.0.0.1:3000/api/каникулы?iata=GRU

Ответ №1:

Если вы хотите поместить данные в строку запроса, как в:

http://127.0.0.1:3000/api/vacations?iata=GRU

Тогда значение будет в req.query .

 export function getWhereToApi(req, res){  const iata = req.query.iata;  const data = whereTo[iata];  if (data) {   res.json(data);  } else {  res.sendStatus(404); // value not found  } }  

Ответ №2:

@Bob, исходя из варианта использования, вы можете ожидать iata от параметров API. В handlers.js файл в функции getWhereToApi() вы можете извлечь его const iata = req.params.iata; следующим образом

 export async function getWhereToApi(req, res){  const iata = req.params.iata   res.json(whereTo[iata]); }  

Я думаю об этом как о самом простом способе.