¿Cómo obtener los campos de la solicitud en Node.js usando el marco expreso?

Estoy escribiendo un script Node.js y tengo problemas con la integración de un formulario de “inicio de sesión”. Puedo hacerlo usando una página HTML estática, sin embargo, usar una página “.ejs” dinámica está causando problemas … mis campos de formulario se informan como “indefinido”.

var helmet = require('helmet'); var bodyParser = require('body-parser') //var cookieParser = require('cookie-parser'); //var csurf = require('csurf'); //Use Express module var express = require('express'); var app = express(); var io = require("socket.io"); //web socket external module var easyrtc = require("easyrtc"); //EasyRTC external module app.use(helmet()); //Statically serve files in these directories app.use("/js", express.static(__dirname + '/easyrtc/js')); app.use("/images", express.static(__dirname + '/easyrtc/images')); app.use("/css", express.static(__dirname + '/easyrtc/css')); //For my homepage app.set('views', __dirname + '/views'); app.set('view engine', 'ejs') //set the view engine to ejs app.use("/css", express.static(__dirname + '/public/css')); app.use("/img", express.static(__dirname + '/public/img')); //Needed to parse form data app.use(bodyParser()); //var csrfProtection = csurf({ cookie: true }); //parse cookies...we need this because "cookie" is true in csrfProtection //app.use(cookieParser()); //global variables var loggedIn = false, password = 'password'; var title = 'This is a heading'; var message = 'Steve is NOT available'; var presenter = 'Username' var passport = 'Password' //Temporary home page app.get('/', function (req, res) { var site = req.hostname; //example returns "localhost" var splits = site.split("."); //"split" on "periods" console.log("site is: " + site); console.log("first split is: " + splits[0]); console.log("second split is: " + splits[1]); if (loggedIn == true) { res.render('index', {title: 'available', message: 'Steve is available...'}); console.log("homepage -logged in"); } else { console.log("homepage -not logged in"); res.render('login', { usr: {}, pword: {}, data: {}, errors: {}//, // csrfToken: req.csrfToken() }); } }); //Respond to POST from login form app.post('/login', function (req, res) { console.log('post to /login'); var usr_STR = String(req.body.usr) var pass_STR = String(req.body.pword) console.log("req.body.usr: " + req.body.usr + " req.body.pword: " + req.body.pword); console.log("usr_STR: " + usr_STR + " pass_STR: " + pass_STR); if (loggedIn == true) { res.send("Already logged in."); } else { console.log("Posted data:" + JSON.stringify(req.body)); console.log("req.body.pw:" + req.body.pw); console.log("req.body.pword:" + req.body.pword); console.log("req.body.usr:" + req.body.usr); if (req.body.pword == password) { loggedIn = true; res.send("You are logged in."); console.log("Logged in"); // Start EasyRTC server var easyrtcServer = easyrtc.listen(app, socketServer); } else { res.render('login', { data: req.body, //{ presenter, passport } errors: { presenter: { msg: 'Your username does not look right' }, passport: { msg: 'Your password does not look right' } }//, // csrfToken: req.csrfToken() }); } } }); //Error Handling app.use((req, res, next) => { res.status(404).send("Sorry can't find that!") }); app.use((err, req, res, next) => { console.error(err.stack) res.status(500).send('Something broke!') }); // Start server on port 8080 var webServer = app.listen(8080); console.log('Listening on port ' + 80); // Start Socket.io so it attaches itself to Express server var socketServer = io.listen(webServer); 

Estoy viendo el informe de mi consola devolviéndome lo siguiente:

 Posted data:{} req.body.pword:undefined req.body.usr:undefined 

Todavía soy algo nuevo para trabajar con Node.Js y, obviamente, estoy teniendo alguna confusión acerca de cómo pasar los parámetros de mi formulario (.ejs) a mi controlador de rutas dentro del cuerpo requerido … cualquier consejo sería muy apreciado Estoy realmente luchando tratando de resolver esto. Gracias de antemano. Saludos.

NOTA: Como se puede ver en mi código, eliminé las referencias a “csurf” y “cookieparser”, ya que en mis versiones anteriores esta información se devolvió dentro del “req.body” … así que pensé que estaban interfiriendo de alguna manera … Sin embargo, parece que hay algo más en juego.

Aquí está el HTML asociado para el formulario de inicio de sesión:

       

Login Form

Oops, please correct the following:

    { %>
Avatar
<input type="text" placeholder= name="usr" required>
<input type="password" placeholder= name="pword" required>
Forgot password?

Necesitas usar body-parser , solo importarlo no funcionará. También pago y envío documentos cuerpo-analizador

 // configure the app to use bodyParser() // parse urlencoded data type as JSON app.use(bodyParser.urlencoded({ extended: true })); // parse various different custom JSON types as JSON app.use(bodyParser.json({ type: 'application/*+json' })); // parse some custom thing into a Buffer app.use(bodyParser.raw({ type: 'application/vnd.custom-type' })); // parse an HTML body into a string app.use(bodyParser.text({ type: 'text/html' }));