Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример:

Связь клиент-сервер

Мы используем экземпляр прокси-сервера JavaScript на стороне клиента в качестве оболочки для службы HTTP (сетевой). Окончательное использование будет выглядеть так:

await server.saveUsername(username); // 🚀

Экземпляр прокси server берет вызываемый ключ свойства saveUsername и делает HTTP-запрос к реальному серверу с заданными данными. Реализация прокси выглядит так:

export const server = new Proxy({}, {
    get(_, key) {
        return async (data) => {
            return await makeHttpPostRequest(`/${key}`, data);
        };
    }
}); // 😮

Сам HTTP-запрос можно отправить с помощью собственного метода fetch или любой библиотеки, например axios.

На стороне сервера мы также можем сделать хорошую реализацию, чтобы отобразить эту структуру. В вашем серверном приложении NodeJS (Express) просто укажите все методы API, чтобы они могли вызываться клиентом через прокси. Это выглядит так:

// Load all API methods
const api = require("./api.js");

// Construct the express server app
const app = express();

// Listen for incoming HTTP POST requests
Object.keys(api).forEach(methodName => {
    app.post(`/${methodName}`, api[methodName]);
});

Показанная выше логика сопоставляет все методы из api.js, чтобы мы прослушивали входящие HTTP-запросы POST с именем метода в качестве пути.
В нашем примере реализация на стороне сервера будет выглядеть так (api.js):

module.exports = {
    saveUsername(req, res) {
        // TODO: save username
        res.send({
            success: "true"
        });
    }
};

Таким образом, какой бы метод вы ни указали в файле api.js, он сразу же будет доступен на стороне клиента. Так вы сэкономите время, а код будет выглядеть красиво и чисто.

Получить код

Вот код на GitHub:
👉 https://github.com/dobscal/javascript-proxy-fun

Вот объяснение видео:
👉 https://www.youtube.com/watch?v=SCHHFcGWRLQ

Я открыт для обратной связи, так что оставляйте комментарии.
Подробнее обо мне: https://dobschal.eu

Спасибо! ❤️