tutorial socket programacin principiantes para node libro examples desde comandos cero javascript node.js express routes form-submit

javascript - socket - programacin̤ node js



Formulario muy simple de Nodejs con rutas que no se pueden publicar (3)

Esta ruta URL HTML <form method="post" action="/post-put"> no coincide con esta ruta en su código server.post(''/test/post-put'' . Haga que coincidan y funcionará.

Tengo una forma muy simple dentro de una aplicación NodeJS / ExpressJS que no se puede publicar.

El código app.js (lo llamo servidor.js) se ve así.

var express = require(''express''); var fs = require(''fs''); var path = require(''path''); var urlEncoded = require(''urlencoded-request-parser''); var bodyParser = require(''body-parser''); var server = express(); var port = process.env.port || 1337; server.use(urlEncoded()); server.use(bodyParser.urlencoded({extended: true})); var routePath="./routes/"; fs.readdirSync(routePath).forEach(function(file) { var route=routePath+file; require(route)(server); }); server.set(''view engine'', ''ejs''); server.set(''views'', __dirname); server.listen(port);

Mi formulario de publicación (post.ejs)

<form method="post" action="post-put"> <fieldset> <!-- Form Name --> <legend>Which Test Type</legend> <!-- Multiple Radios (inline) --> <div class="form-group"> <label class="col-md-2 control-label" for="TestType">Please test our</label> <div class="col-md-4"> <label class="radio-inline" for="TestType-0"> <input type="radio" name="SoftwareTestType" id="TestType-0" value="SoftwareTest" checked="checked"> Software </label> <label class="radio-inline" for="TestType-1"> <input type="radio" name="HardwareTestType" id="TestType-1" value="HardwareTest"> Hardware </label> </div> </div> </fieldset> <input type=''submit'' class="btn btn-default" id=''submit'' value=''Submit your Test''/> </form>

Los resultados se muestran en esta página (post-results.ejs)

<%= Test %>

Tengo dos rutas (post-get.js)

module.exports = function(server){ server.get(''/post'', function(req,res){ res.render(''./views/test/post.ejs'',{ }); }); }

y (post-puts.js)

module.exports = function(server){ server.post(''post-put'', function(req,res){ console.log("In Submission POST") var TestType = ""; if(req.body.HardwareTestType == true) TestType = "Hardware"; else TestType = "Software"; res.render(''./views/test/post-results.ejs'',{ Test: TestType }); }); }

Cuando hago clic en el botón Enviar, las herramientas del desarrollador muestran esto:

Esto me está volviendo loco. ¿Alguien sabe cómo hacer esto para publicar los resultados en el archivo post-results.ejs? El diseño del sistema de archivos para la aplicación se ve así:

ACTUALIZACIÓN: Tanto la forma como el enrutador tienen las mismas rutas "post-puts". En la ruta posterior a la publicación hay un console.log () ... pero NO se llama. Creo que todavía podría ser el tipo de aplicación como se muestra en la imagen dos arriba (Herramientas de desarrollador) Cuando una "cosa" tiene solo 1 función, decir que no funciona es específica; si pudiera ser más específico, sabría cuál es el problema fue y arreglarlo.


eliminar la barra desde el post-put

<form method="post" action="post-put">


SOLUCIONADO

La resolución del problema anterior fue la siguiente.

1) Cambié la ruta a "/ post-put" en el formulario Acción y en el archivo de ruta. 2) Agregué enctype = "multipart / form-data" al formulario.

Entonces el formulario ahora se ve como

<form method="post" action="/post-put" enctype="multipart/form-data"> <fieldset> <!-- Form Name --> <legend>Which Test Type</legend> <!-- Multiple Radios (inline) --> <div class="form-group"> <label class="col-md-2 control-label" for="TestType">Please test our</label> <div class="col-md-4"> <label class="radio-inline" for="TestType-0"> <input type="radio" name="TestType" id="TestType-0" value="SoftwareTest" checked="checked"> Software </label> <label class="radio-inline" for="TestType-1"> <input type="radio" name="TestType" id="TestType-1" value="HardwareTest"> Hardware </label> </div> </div> </fieldset> <input type=''submit'' class="btn btn-default" id=''submit'' value=''Submit your Test''/> </form>

SOLUCIÓN ALTERNATIVA Mantenga el formulario enctype como enctype="application/x-www-form-urlencoded" En App.js (mi servidor.js) Quite app.use(bodyparser.urlencoded()); Cambiar app.use(bodyParser.urlencoded({extended: true})); a server.use(bodyParser.urlencoded());

¡Ahora el método POST de la forma funciona! Gracias a aquellos que trataron de ayudar.