У меня есть экспресс-приложение, и я хочу иметь возможность перенаправить почтовый запрос на запрос на получение.
Вот приложение:
const express = require('express');
const app = express();
app.get('/get-route', function(req, res, next){
res.redirect('/');
});
app.post('/post-route', function(req, res, next){
res.redirect('/');
});
app.get('/', function(req, res, next){
res.send('Home Page!\n');
});
app.listen(3001);
и вот мои результаты с завитком:
steve@Dell ~ $ curl http://localhost:3001/
Home Page!
steve@Dell ~ $ curl -L http://localhost:3001/get-route
Home Page!
В приведенном ниже запросе curl говорится, что он перенаправляется на /, но я не понимаю, почему он не отображает сообщение Home Page!
.
steve@Dell ~ $ curl -X POST http://localhost:3001/post-route
Found. Redirecting to /
Я думал, что опция -L может работать, но это дает ошибку:
steve@Dell ~ $ curl -L -X POST http://localhost:3001/post-route
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /</pre>
</body>
</html>
Было бы здорово иметь представление о том, как я могу перенаправить свой почтовый запрос на запрос на получение с помощью curl.
С тех пор, как я впервые задал этот вопрос, я заметил, что могу получить то, что хочу, используя HTTPie:
steve@Dell ~ $ http --form --follow POST localhost:3001/post-route
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 11
Content-Type: text/html; charset=utf-8
Date: Sun, 27 Jan 2019 18:03:14 GMT
ETag: W/"b-OVE2GcFhwNv2PpVDFXfoBIbNry4"
X-Powered-By: Express
Home Page!
Я все еще хотел бы иметь возможность использовать curl, если это возможно.
🤔 А знаете ли вы, что...
С ExpressJS удобно работать с шаблонами для генерации HTML-страниц.
Таким образом, в исходном коде выше вы не указываете код состояния с перенаправлением с сообщения на маршрут получения. Express отправит код состояния по умолчанию 302, что означает, что браузер вернет новое местоположение «/» и метод GET. Все должно быть хорошо...
За исключением случаев, когда вы используете параметр curl -X, вы непреднамеренно указываете curl выполнять все запросы к этому маршруту (включая перенаправления) с указанным исходным методом.
Таким образом, curl возвращает местоположение перенаправления и правильный метод, но затем пытается отправить POST на маршрут GET в соответствии с вашими инструкциями. Использование параметра -X является своего рода общим принудительным решением проблем, для которых доступны конкретные решения.
Как указано в приведенной ниже ссылке, в этой ситуации вы хотели бы использовать опция curl -d, поскольку это один из предполагаемых способов отправки запроса POST с помощью curl.
curl использует POST для всех запросов после перенаправления
TLDR:curl -L -d POST http://localhost:3001/post-route
должен работать.