Вот моя простая форма:

<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 Глядя на вывод

. В множественном тесте я видел, как он разрешает 120 перестановок [0,1,2,3,4] 2000 раз за 25 ~ 35 мс.

Я бы пошел проверить, есть ли у него хотя бы один ключ. Этого было бы достаточно, чтобы сказать мне, что это не пусто. изменен еще раз, начиная с Express 4.16.0 , теперь вы можете использовать express.json() и express.urlencoded(), как и в Express 3.0 Глядя на вывод

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

$ npm install --save body-parser

Прописная буква (Lu)

var bodyParser = require('body-parser')
app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
  extended: true
})); 

Остальное как в Express 3.0 :

и затем используйте функцию следующим образом:

Добавьте одну или обе следующие строки кода:

app.use(express.json());       // to support JSON-encoded bodies
app.use(express.urlencoded()); // to support URL-encoded bodies

Затем в вашем обработчике используйте req.body в любом случае для всех классных массивов высшего порядка :-) Используйте

// assuming POST: name=foo&color=red            <-- URL encoding
//
// or       POST: {"name":"foo","color":"red"}  <-- JSON encoding

app.post('/test-page', function(req, res) {
    var name = req.body.name,
        color = req.body.color;
    // ...
});

Заметьте, что использование express.bodyParser() не рекомендуется.

app.use(express.bodyParser());

… эквивалентно:

app.use(express.json());
app.use(express.urlencoded());
app.use(express.multipart());

Проблемы безопасности существуют с express.multipart(), поэтому лучше явно добавить поддержку для конкретного типа (ов) кодирования, который вам требуется. Если вам нужно многокомпонентное кодирование (например, для поддержки загрузки файлов), то вам следует читать это Глядя на вывод

соображениям безопасности при использовании 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 3.0 (что расширяет Express).

Примечание: connect.bodyParser() скоро будет обновлено и теперь включает в себя только urlencoded и json Короче говоря, вместо …


… вы должны использовать

app.use(express.bodyParser());

и если / когда вам нужно обрабатывать multipart формы (загрузка файлов), используйте стороннюю библиотеку или промежуточное ПО, такое как multiparty, busboy, dicer и т. д.

app.use(express.urlencoded());
app.use(express.json());      // if needed

Примечание

: этот ответ для Express 2. См. Если вы используете connect / express , вы должны использовать руководство говорится, что для Express 3.

Expressjs Промежуточное программное обеспечение bodyParser не совместим со всеми браузерами Вот оригинальная версия только для подключения: Глядя на вывод

// example using express.js:
var express = require('express')
  , app = express.createServer();
app.use(express.bodyParser());
app.post('/', function(req, res){
  var email = req.param('email', null);  // second parameter is default
});

B При этом строка запроса и тело анализируются с помощью

// example using just connect
var connect = require('connect');
var url = require('url');
var qs = require('qs');
var server = connect(
  connect.bodyParser(),
  connect.router(function(app) {
    app.post('/userlogin', function(req, res) {
      // the bodyParser puts the parsed request in req.body.
      var parsedUrl = qs.parse(url.parse(req.url).query);
      var email = parsedUrl.email || req.body.email;;
    });
  })
);

обработки параметров в стиле Rails (. Чтобы проанализировать повторяющиеся параметры с помощью qs С чем вы столкнулись , а не низкий уровень querystring универсально поддерживается, параметр должен иметь квадратные скобки: qs. Он также поддерживает вложенные карты. В дополнение к синтаксическому анализу представлений HTML-формы bodyParser может автоматически анализировать запросы JSON. name[]=val1&name[]=val2: Я перечитал express.js и изменил свой ответ, чтобы он был более естественным для пользователей Express.

I Вместо этого используйте любой из методов, ранее упомянутых другими: свойство Это будет сделано, если вы хотите создать отправленный запрос без промежуточного программного обеспечения:

Это отправит это в браузер

app.post("/register/",function(req,res){
    var bodyStr = '';
    req.on("data",function(chunk){
        bodyStr  = chunk.toString();
    });
    req.on("end",function(){
        res.send(bodyStr);
    });

});

Вероятно, лучше использовать промежуточное программное обеспечение, хотя вам не нужно писать это снова и снова в каждом маршруте.

email=emailval&password1=pass1val&password2=pass2val

Ошибка: большая часть промежуточного программного обеспечения (например, bodyParser) больше не связана с Express и должна быть установлена ​​отдельно. Смотрите

Примечание для пользователей Express 4:

Если вы попытаетесь поставить app.use(express.bodyParser()); Этот трюк помечает начало элемента CDATA как комментарий JavaScript ; в HTML, который анализатор JavaScript игнорирует тег CDATA (это комментарий). В XHTML синтаксический анализатор XML (который запускается до JavaScript) обнаруживает его и обрабатывает остальное до конца CDATA как CDATA.

https://github.com/senchalabs/connect # middleware . Вам нужно будет установить пакет Глядя на вывод

из npm body-parser политика того же происхождения Вывод: , затем используйте что-то вроде следующего (пример взят из страницу GitHub ):

var express    = require('express');
var bodyParser = require('body-parser');

var app = express();

app.use(bodyParser());

app.use(function (req, res, next) {
  console.log(req.body) // populated!
  next();
})

по умолчанию равен 1 ГБ и ограничивает экспоненциальную скорость сканирования перед запуском двоичного поиска. Я сомневаюсь, что это даже нужно будет изменить, но я всегда забегая вперед. ;)

<form action='/somepath' method='post'>
   <input type='text' name='name'></input>
</form>

Используя express

app.post('/somepath', function(req, res) {

    console.log(JSON.stringify(req.body));

    console.log('req.body.name', req.body['name']);
});

Затем для { *} Запрос вы можете получить значения поста через

{"name":"x","description":"x"}
req.param.name x
app.use(express.bodyParser());

Обновление для Express 4.4.1 app.post bodyParser req.body.{post request variable} Глядя на вывод

urlencoded

Промежуточное программное обеспечение следующего удалено из Express.

  • Когда вы используете промежуточное ПО напрямую, как вы это делали в Express 3.0. Вы получите следующую ошибку:
  • https://jsfiddle.net/r7szvt5k/
  • Чтобы использовать это промежуточное ПО, теперь вам нужно сделать
  • multipart

, так как bodyParser помечен как устаревший, поэтому я рекомендую следующий способ, используя json, urlencode и многочастный парсер, такой как грозный, connect- многопартийность. (Multipart middleware также не рекомендуется).

Error: Most middleware (like urlencoded) is no longer bundled with Express and 
must be installed separately.

Внешний интерфейс: Npm для каждого промежуточного ПО отдельно.

Для установки пакета

Также помните, что, просто определяя urlencode json, данные формы не будут анализироваться, а req.body не будет определяться. Вам нужно определить промежуточное программное обеспечение для обработки многочастного запроса.

var urlencode = require('urlencode');
var json = require('json-middleware');
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();

app.use(json);
app.use(urlencode);
app.use('/url/that/accepts/form-data', multipartMiddleware);

Backend:

import express from 'express';
import bodyParser from 'body-parser';

const app = express();
app.use(bodyParser.json()); // add a middleware (so that express can parse request.body's json)

app.post('/api/courses', (request, response) => {
  response.json(request.body);
});

А затем добавьте его в стек промежуточного программного обеспечения вместе с другим промежуточным программным обеспечением для разбора форм.

fetch("/api/courses", {
  method: 'POST',
  body: JSON.stringify({ hi: 'hello' }), // stringify JSON
  headers: new Headers({ "Content-Type": "application/json" }); // add headers
});

Поскольку большинство ответов используется для Express, bodyParser, connect ;, где multipart устарела. Существует безопасный способ легко отправлять многокомпонентные объекты.

Multer можно использовать в качестве замены для connect.multipart ().

connect.json ()

$ npm install multer

Рассматривали ли вы использование jQuery, чтобы избежать обнаружения всех браузеров? С jQuery это будет так же просто, как:

var multer = require('multer');

connect.urlencoded ()

app.use(express.json());
app.use(express.urlencoded());
app.use(multer({ dest: './uploads/' }));

multer () обрабатывает опцию application / json

обрабатывает multipart / form-data vs

Я искал именно эту проблему. Я следовал всем советам выше, но req.body все еще возвращал пустой объект {}. В моем случае, это было что-то столь же простое, как HTML, который был неправильным. В html вашей формы убедитесь, что вы используете атрибут

в своих входных тегах, а не только

. В противном случае ничего не анализируется. 'name' Моя идиотская ошибка — твоя выгода. 'id' app.use (express.bodyParser ())

<input id='foo' type='text' value='1'/>             // req = {}
<input id='foo' type='text' name='foo' value='1' /> // req = {foo:1}

. BodyParser — это объединение json urlencoded mulitpart. Вы не должны использовать это, потому что multipart будет удален в Connect 3.0.

— но оно также запускает обычное Чтобы решить эту проблему, вы можете сделать это: app.use (app.router)

Потоковая обработка запросов сработала для меня

app.use(express.json());
app.use(express.urlencoded());

Очень важно знать, что Я мог бы найти все параметры, используя следующий код для обоих Понятно!

Потоковая обработка запросов работала для меня

req.on('end', function() {
    var paramstring = postdata.split("&");
});

var postdata = "";
req.on('data', function(postdataChunk){
    postdata  = postdataChunk;
});

Я мог найти все параметры, используя следующий код для обоих Затем следующий код заносит в журнал 0, 1, 2, а затем выдает ошибку и Пример JSFiddle (протестировано позднее Safari, FF, Chrome, Edge и IE11) запросов.

 var express = require('express');
    var app = express();
    const util = require('util');  
    app.post('/', function (req, res) {
        console.log("Got a POST request for the homepage");
        res.send(util.inspect(req.query,false,null));
    })
Post Parameters can be retrieved as follows-

app.post('/api/v1/test',Testfunction);
http.createServer(app).listen(port, function(){
console.log("Express server listening on port "   port)
});

function Testfunction(request,response,next)
{
   console.log(request.param("val1"));

   response.send('HI');
}

использовать пакет express-fileupload

var app = require('express')();
var http = require('http').Server(app);
const fileUpload = require('express-fileupload')

app.use(fileUpload());

app.post('/', function(req, res) {
var email = req.body.email;
res.send('<h1>Email :</h1> ' email);
});

http.listen(3000, function(){
  console.log('Running Port:3000');
});
var express        =         require("express");
var bodyParser     =         require("body-parser");
var app            =         express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.get('/',function(req,res){
  res.sendfile("index.html");
});
app.post('/login',function(req,res){
  var user_name=req.body.user;
  var password=req.body.password;
  console.log("User name = " user_name ", password is " password);
  res.end("yes");
});
app.listen(3000,function(){
  console.log("Started on PORT 3000");
})

Вы используете ‘req.query.post’ с неверным методом ‘req.query.post’ работает с ‘method = get’ ‘method = post’ работает с body-parser.

Просто попробуйте это, изменив сообщение, чтобы получить

<form id="loginformA" action="userlogin" method="get">
<div>
    <label for="email">Email: </label>
    <input type="text" id="email" name="email"></input>
</div>
<input type="submit" value="Submit"></input>  
</form>

А в экспресс-коде используйте ‘app.get’