Tengo el siguiente código y también he definido la respuesta para POST/messages pero cuando voy a /bc/add y envío un formulario, muestra que Cannot POST /messages .
¿Puedes explicarme el motivo? Aquí está mi código:
const express = require("express"); const bodyParser = require("body-parser"); const app = express(); app.use(bodyParser.urlencoded({ extended: false })); app.use("/bc/add", (req, res, next) => { console.log("In the next middleware !", req.url); res.send( '<form action="/messages" method="post"><input type="text" name="message"><button type="submit">Submit </button></form>' ); app.use("/s", (req, res, next) => { res.send("hup"); }); app.post("/messages", (req, res, next) => { console.log(req.body); console.log("In the middleware !", req.url); res.redirect("/s"); }); }); app.use("/favicon.ico", (req, res, next) => { console.log("In the middleware !", req.url); res.sendStatus(204); }); app.listen(3000, () => { console.log("Server running at port 3000"); });Está declarando controladores dentro de un middleware, que no es como funciona Express.
Los controladores deben declararse en el "nivel superior":
app.use("/bc/add", (req, res, next) => { console.log("In the next middleware !", req.url); res.send( '<form action="/messages" method="post"><input type="text" name="message"><button type="submit">Submit </button></form>' ); }); // end of the "middleware" app.use("/s", (req, res, next) => { res.send("hup"); }); app.post("/messages", (req, res, next) => { console.log(req.body); console.log("In the middleware !", req.url); res.redirect("/s"); }); Además de eso, hablando semánticamente, los controladores para /bc/add/ y /s no son middleware, sino controladores de ruta. Es mejor declararlos como tales explícitamente, usando app.get() en lugar de app.use() .