Как я могу построить обработчик маршрута в Express. js и Ax ios для обработки 2 уровней запросов API? - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть внешний интерфейс, который будет запрашивать у бэкенда, а внутренний запросит у внешнего API с ключом API. Я понимаю, что это довольно распространенная практика, хотя я могу ошибаться. Моя проблема в том, что я не совсем понимаю, как структурировать мои обработчики маршрутов и промежуточное программное обеспечение для такой ситуации. Мое промежуточное программное обеспечение server.ts берет промежуточное программное обеспечение маршрутизатора, промежуточное программное обеспечение маршрутизатора принимает промежуточное программное обеспечение запроса ax ios, которое должно возвращать данные во внешний интерфейс через URI /by-name/:name. Имеет ли смысл моя текущая реализация? Или есть лучший способ справиться с этим? Через некоторое время я сохраню данные на сервере MongoDB.

. js

import homeRouter from './routes/home';
import postsRouter from './routes/posts';

app.use('/', homerouter);
app.use('posts', postsRouter);

app.use((err, req, res, next) => {
    res.status(err.status || 500);
    res.json({ message: err.message });
    next();
});

app.listen(3000);

маршруты / сообщения. js

import express from 'express';
import { getPostByName } from '../middleware/axiosMiddleWare';

const postRouter = express.Router();

postRouter.get('/by-name/:name', getPostByName);

export default postRouter;

middleware / axiosMiddleWare. js

import apiInstance from './axiosInstance';

export const getPostByName = async (req, res, next) => {
    const nameParam = req.params.name;
    try {
        const post = await apiInstance.get(`/by-name/${nameParam}`);
        if (post) {
            res.json(post);
            next();
        } else {
            res.status(404);
            res.json({ message: 'post not found!' });
        }
    } catch (error) {
        res.status(500).json({ message: error.message });
    }
};

middleware / axiosInstance. js

import axios from 'axios';

const postInstance = axios.create({
    baseURL: 'https://fake.api.fake/fake/sup/v4',
    timeout: 2000,
    headers: { 'X-Fake-Token': 'FAKEAPI-xxx3a4d6c-333e-333-ab0b-273h47574' },
});

export default postInstance;
...