Node-сервер без экспресс-маршрутизации, как использовать параметры пути

Мне нужно разработать веб-сервер без Express, и мне было интересно, есть ли способ использовать маршрут Express, например, /path/:example, чтобы я мог получить к нему доступ с помощью /path/test, а переменная запроса example была бы "test".

В настоящее время я использую только базовые параметры запроса, /path?example=test, но я хотел бы уменьшить их до приведенных выше.

Разве это невозможно, если только это не экспресс? Я не могу использовать какой-либо модуль маршрутизации.

Чтобы ответить на ваш вопрос, да, это возможно, но более полный ответ не может быть дан, если вы не расскажете нам больше о том, что вы пытаетесь сделать и почему вы не можете использовать модуль. Это домашнее задание? Если нет, тот, для кого вы это создаете, должен понимать, что он упускает большую часть ценности современного программного обеспечения, не позволяя сторонним библиотекам с открытым исходным кодом.

Paul 01.03.2019 14:35

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

iG Cloud 01.03.2019 14:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
4 015
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, я поддерживаю свой комментарий о том, что ваш клиент принимает необдуманное решение. Да, можно выполнять маршрутизацию без Express, но для этого потребуется гораздо больше пользовательского кода, и это не дает дополнительной ценности. Кроме того, в той же экосистеме есть МНОГО действительно хороших инструментов (например, шлем), которые делают ваши приложения лучше, проще в создании и обслуживании и более безопасными.

Тем не менее, если клиент встал на этот путь безумия, и вы не хотите «увольнять» своего клиента, вот что вам нужно сделать:

const http = require('http');
const url = require('url');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  const requestUrl = url.parse(req.url);
  const path = requestUrl.pathname;

  const parts = path.split('/').slice(1);

  // This is really brittle, but assuming you know it's going to be 2 parts remaining after the above..

  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end(parts[1]);
});

server.listen(port, hostname, () => {
  console.info(`Server running at http://${hostname}:${port}/`);
});

Итак, это основы. Очевидно, что если вы хотите существенно переделать маршрутизацию, предоставляемую Express, вам нужно будет добавить гораздо больше логики для обработки синтаксического анализа строки так, как вы хотите, и назначения обработчиков маршрутов и всего такого. Извините, это непросто, но именно поэтому так много людей используют Express (или Connect, или другие модули маршрутизации).

Некоторые другие вещи, которые могут сделать это проще для вас... Express имеет открытый исходный код, поэтому прочитайте их исходный код и посмотрите, как они делают то, что вам нужно, а затем реализуйте это самостоятельно. Я не говорю копировать его дословно (если вы это сделаете, вы можете просто использовать их модуль...), но черпайте вдохновение.

Например, они используют утилиту путь к регулярному выражению, которая преобразует строку «/path/:example» в регулярное выражение, которое можно использовать для проверки входящего URL-адреса. Чтение этого исходного кода может помочь вам понять, что они делают лучше.

Спасибо, это помогает, но я понимаю, что вы имеете в виду, когда не используете экспресс. Я просто стажер в своей компании, и я разрабатываю сервер mvp, я не совсем уверен, почему, но они сказали, что один из клиентов, которым нужен этот продукт, хочет его без экспресс-доставки.

iG Cloud 01.03.2019 14:56

Бро я тебя очень люблю

k0o 07.07.2021 03:02

Другие вопросы по теме