Наилучшая практика использования Nodejs

URLSearchParams

Firefox 44+, Opera 36+, Edge 17+, Safari 10.3+ и Chrome 49+ поддерживают API URLSearchParams :

Для стабильных версий IE существует предложенная google-версия URLSearchParams polyfill .

Она не стандартизирована W3C , но это живой стандарт WhatWG .

Вы можете использовать его по месту, но вам нужно удалить вопросительный знак ? (например, с помощью .slice(1)):

let params = new URLSearchParams(location.search.slice(1));

или

let params = (new URL(location)).searchParams;

Или, конечно, по любому URL:

let url = new URL('https://example.com?foo=1&bar=2');
let params = new URLSearchParams(url.search.slice(1));

Вы можете получить параметры также с помощью сокращенного .searchParams на объекте URL, например:

let params = new URL('https://example.com?foo=1&bar=2').searchParams;
params.get('foo'); // "1"
params.get('bar'); // "2" 

Вы читаете / устанавливаете параметры через API get(KEY), set(KEY, VALUE), append(KEY, VALUE). Вы также можете перебирать все значения for (let p of params) {}.

Для аудита и тестирования доступны [reference] [] и образец страницы .

0
задан posit labs 13 July 2018 в 18:39
поделиться

1 ответ

В этом случае, вероятно, использование концепции экспресс-промежуточного программного обеспечения (вызов next()) будет излишним.

Я бы подошел к этому, создав абстракцию для пути успеха. Рассмотрим что-то вроде этого:

const resWithSuccess = (req, res, data) => {
    res.json({
      data: data,
      timestamp: new Date().toUTCString(),
      // success: res.statusCode < 400, // --> actually you don't need this,
      //                                       since it will always be true
      // status: res.statusCode // --> or whatever else "meta" info you need
    });
};

Затем, как только вам нужно будет откликаться на успех, перейдите к нему:

exports.getTask = async function (req, res, next) {
    // .... bla bla
    if (task) {
        resWithSuccess(tank);
    }
};

PS: ... и вы можете использовать концепцию экспресс-промежуточного программного обеспечения (вызов next()) для пути ошибки.

0
ответ дан Kaloyan Kosev 17 August 2018 в 12:18
поделиться
  • 1
    Благодаря! Это был мой первый подход. Я подумал, что было бы слишком драматично обернуть ответ в каждом контроллере, но это намного чище, чем использование промежуточного программного обеспечения. Однако я не понимаю PS. вы имеете в виду вызов следующего с ошибкой, как следующая (ошибка), чтобы вызвать обработчик ошибок? Это то, что я уже делаю. – Rib 13 July 2018 в 19:14
  • 2
    Да, точно. Ваш путь ошибки с вызовом next(error) выглядит в порядке. – Kaloyan Kosev 13 July 2018 в 20:00
  • 3
    @Rib, если это ответит на ваш вопрос, я хотел бы попросить вас принять мой ответ, нажав зеленую галочку . Это указывает сообществу, что вы нашли решение, дает некоторую репутацию как вам, так и вам. меня, и это может помочь людям, испытывающим подобную проблему, получить ваш вопрос. – Kaloyan Kosev 16 July 2018 в 14:04
Другие вопросы по тегам:

Похожие вопросы: