Вот моя простая форма:
<form id="loginformA" action="userlogin" method="post">
<div>
<label for="email">Email: </label>
<input type="text" id="email" name="email"></input>
</div>
<input type="submit" value="Submit"></input>
</form>
Вот мой код Express.js /Node.js:
app.post('/userlogin', function(sReq, sRes){
var email = sReq.query.email.;
}
Я пытался sReq.query.email
или sReq.query['email']
или sReq.params['email']
и т. Д. Ни один из них не работает. Они все возвращаются undefined
.
Когда я переключаюсь на вызов Get, он работает, так что ... есть идеи?
javascript
node.js
post
express
murvinlai
источник
источник
bodyParser()
ответы здесь, должен также прочитать ответОтветы:
Вещи изменились еще раз , начиная Экспресс 4.16.0 , теперь вы можете использовать
express.json()
иexpress.urlencoded()
так же , как в Express 3.0 .Это отличалось, начиная с Express 4.0 до 4.15 :
а потом:
Остальное как в Express 3.0 :
Во-первых, вам нужно добавить промежуточное программное обеспечение для анализа почтовых данных тела.
Добавьте одну или обе следующие строки кода:
Затем в вашем обработчике используйте
req.body
объект:Обратите внимание, что использование
express.bodyParser()
не рекомендуется....эквивалентно:
Проблемы безопасности существуют
express.multipart()
, поэтому лучше явно добавить поддержку для конкретного типа (ов) кодирования, который вам требуется. Если вам нужно многокомпонентное кодирование (например, для поддержки загрузки файлов), вам следует прочитать это .источник
content-type
заголовок, например:curl -d '{"good_food":["pizza"]}' -H 'content-type:application/json' "http://www.example.com/your_endpoint"
bodyParser
абстрагирует JSON, URL-кодированные и составные данные вreq.body
объект.app.use(require('body-parser').json())
строки. И тогда вы можете прочитать данные json из объекта body вашего запроса, т.req.body
Е. Из определения маршрута.Проблема безопасности с использованием express.bodyParser ()
В то время как все остальные ответы в настоящее время рекомендуется использовать
express.bodyParser()
промежуточное программное обеспечение , это на самом деле обертка вокругexpress.json()
,express.urlencoded()
иexpress.multipart()
промежуточное программное ( http://expressjs.com/api.html#bodyParser ). Разбор тела запроса формы выполняетсяexpress.urlencoded()
промежуточным программным обеспечением, и это все, что вам нужно для предоставления данных формы наreq.body
объекте.Из-за проблем безопасности, связанных с тем, как
express.multipart()
/connect.multipart()
создает временные файлы для всех загруженных файлов (и они не являются сборщиком мусора), теперь рекомендуется не использоватьexpress.bodyParser()
оболочку, а вместо этого использовать только то промежуточное программное обеспечение, которое вам необходимо.Примечание:
connect.bodyParser()
скоро будет обновлено, чтобы включитьurlencoded
и толькоjson
когда выйдет Connect 3.0 (который расширяет Express).Короче, вместо ...
... вы должны использовать
и если / когда вам нужно обрабатывать многочастные формы (загрузка файлов), используйте стороннюю библиотеку или промежуточное ПО, такое как multiparty, busboy, dicer и т. д.
источник
multipart()
качестве частиbodyParser()
, онbodyParser()
снова становится «безопасным», но вам необходимо явно включить поддержку нескольких компонентов с помощью сторонней библиотеки.Примечание : этот ответ для Express 2. Смотрите здесь для Express 3.
Если вы используете connect / express, вам следует использовать промежуточное ПО bodyParser : оно описано в руководстве по Expressjs .
Вот оригинальная версия только для подключения:
И строка запроса, и тело анализируются с помощью обработки параметров в стиле Rails (
qs
), а не низкоуровневойquerystring
библиотеки . Для того , чтобы разобрать повторяющиеся параметры сqs
, параметр должен иметь скобки:name[]=val1&name[]=val2
. Он также поддерживает вложенные карты. В дополнение к синтаксическому анализу представлений HTML-формы bodyParser может автоматически анализировать запросы JSON.Изменить : я прочитал на express.js и изменил свой ответ, чтобы быть более естественным для пользователей Express.
источник
Это будет сделано, если вы хотите создать отправленный запрос без промежуточного программного обеспечения:
Это отправит это в браузер
Вероятно, лучше использовать промежуточное ПО, так что вам не придется писать это снова и снова на каждом маршруте.
источник
Примечание для пользователей Express 4:
Если вы попытаетесь вставить
app.use(express.bodyParser());
свое приложение, вы получите следующую ошибку при попытке запустить сервер Express:Вам нужно будет установить пакет
body-parser
отдельно от npm , а затем использовать что-то вроде следующего (пример взят со страницы GitHub ):источник
Учитывая некоторую форму:
Используя экспресс
Вывод:
источник
Backend:
Внешний интерфейс:
источник
Тогда для
app.post
запроса вы можете получить значения поста черезreq.body.{post request variable}
.источник
Обновление для Express 4.4.1
Промежуточное программное обеспечение следующего удалено из Express.
Когда вы используете промежуточное ПО напрямую, как в Express 3.0. Вы получите следующую ошибку:
Чтобы использовать это промежуточное ПО, теперь вам нужно выполнить npm для каждого промежуточного ПО отдельно.
Поскольку bodyParser помечен как устаревший, поэтому я рекомендую следующий способ с использованием json, urlencode и многочастного парсера, например, грозного, connect-multiparty. (Multipart middleware также не рекомендуется).
Также помните, что, просто определяя urlencode + json, данные формы не будут анализироваться, а req.body будет неопределенным. Вам нужно определить промежуточное программное обеспечение для обработки многочастного запроса.
источник
Для Express 4.1 и выше
Так как большинство ответов используют для Express, bodyParser, connect; где multipart устарела. Существует безопасный способ легко отправлять многокомпонентные объекты.
Multer можно использовать в качестве замены для connect.multipart ().
Чтобы установить пакет
Загрузите его в свое приложение:
Затем добавьте его в стек промежуточного программного обеспечения вместе с другим промежуточным программным обеспечением для анализа форм.
connect.json () обрабатывает приложение / json
connect.urlencoded () обрабатывает application / x-www-form-urlencoded
multer () обрабатывает multipart / form-data
источник
Я искал именно эту проблему. Я следовал всем советам выше, но req.body все еще возвращал пустой объект {}. В моем случае, это было что-то столь же простое, как HTML, который был неправильным.
В html вашей формы убедитесь, что вы используете
'name'
атрибут в своих входных тегах, а не только'id'
. В противном случае ничего не анализируется.Моя идиотская ошибка - твоя выгода.
источник
Вы не должны использовать app.use (express.bodyParser ()) . BodyParser - это объединение json + urlencoded + mulitpart. Вы не должны использовать это, потому что multipart будет удален в Connect 3.0.
Чтобы решить это, вы можете сделать это:
Очень важно знать, что app.use (app.router) следует использовать после json и urlencoded, иначе это не работает!
источник
Поток запросов работал на меня
источник
postdata.split("&")
было бы загрузить модуль ядра ,querystring = require('querystring')
а затем разобрать вашpostdata
сquerystring.parse(postdata)
;Я мог бы найти все параметры, используя следующий код для запросов POST и GET .
источник
Написано в Express версии 4.16
Внутри функции маршрутизатора вы можете использовать
req.body
свойство для доступа к переменной post. Например, если бы это былPOST
маршрут вашей формы, он вернул бы то, что вы ввели:PS для тех, кто знаком с PHP: для доступа к
$_GET
переменной PHP мы используемreq.query
и для доступа к$_POST
переменной PHP мы используемreq.body
в Node.js.источник
источник
Параметры сообщения могут быть получены следующим образом:
источник
param
используется для запросов GET .. не POST и в вашем примере отсутствуют детали, что очень запутанно для новичков. И вдобавок к этомуrequest.param
на самом деле не рекомендуется, так что ваш пример неверен на многих уровнях.Вы используете
req.query.post
с неправильным методомreq.query.post
работаетmethod=get
,method=post
работает с body-parser .Просто попробуйте это, изменив сообщение, чтобы получить :
А в экспресс-коде используйте «app.get»
источник
Используйте пакет express-fileupload :
источник