Мне нужно разработать веб-сервер без Express, и мне было интересно, есть ли способ использовать маршрут Express, например, /path/:example, чтобы я мог получить к нему доступ с помощью /path/test, а переменная запроса example была бы "test".
В настоящее время я использую только базовые параметры запроса, /path?example=test, но я хотел бы уменьшить их до приведенных выше.
Разве это невозможно, если только это не экспресс? Я не могу использовать какой-либо модуль маршрутизации.
Я не слишком уверен в том, почему, но клиент попросил не использовать экспресс, что, как я предполагаю, также означает отсутствие другой системы маршрутизации. @Павел





Итак, я поддерживаю свой комментарий о том, что ваш клиент принимает необдуманное решение. Да, можно выполнять маршрутизацию без 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, я не совсем уверен, почему, но они сказали, что один из клиентов, которым нужен этот продукт, хочет его без экспресс-доставки.
Бро я тебя очень люблю
Чтобы ответить на ваш вопрос, да, это возможно, но более полный ответ не может быть дан, если вы не расскажете нам больше о том, что вы пытаетесь сделать и почему вы не можете использовать модуль. Это домашнее задание? Если нет, тот, для кого вы это создаете, должен понимать, что он упускает большую часть ценности современного программного обеспечения, не позволяя сторонним библиотекам с открытым исходным кодом.