javascript - Node.js/Express - Routing More Than One Form Post -


i'm working on webpage has 2 separate forms on it, 2 separate form actions. can 1 form work, can't both work. i've got post route router.post('/direct-user',...) , post route router.post('/other-user', ...), if change 1 of router.post('/',...) works fine.

i suspect there's wrong in app.js route declarations, can't figure out.

any guidance super awesome.

my app structure looks this:

/project     /routes         index.js         requser.js     /views         error.hbs         index.hbs         layout.hbs         requser.hbs     app.js     package.json 

and here's main app file has module imports, route locations, , error handling. app.js

// module imports // var express = require('express'); var bodyparser = require('body-parser'); var cookieparser = require('cookie-parser'); var morgan = require('morgan'); var path = require('path'); var app = express();  app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'hbs'); app.use(morgan('dev')); app.use(bodyparser.json()); app.use(bodyparser.urlencoded({ extended: false })); app.use(validator()); app.use(express.static(path.join(__dirname, 'public')));   // routes , views // app.use('/', require('./routes/index')); app.use('/user/:id', require('./routes/user')); app.use('/user-update', require('./routes/user')); app.use('/requser', require('./routes/requser')); app.use('/direct-user', require('./routes/requser')); app.use('/other-user', require('./routes/requser'));   // catch 404 , forward error handler // app.use(function(req, res, next) {         var err = new error('not found');         err.status = 404;         next(err); });  // development error handler; print stacktrace // if (app.get('env') === 'development') {         app.use(function(err, req, res, next) {                 res.status(err.status || 500);                 res.render('error', {                         message: err.message,                         error: err                 });         }); }  // production error handler; no stacktraces leaked user // app.use(function(err, req, res, next) {         res.status(err.status || 500);         res.render('error', {                 message: err.message,                 error: {}         }); });  module.exports = app; 

here's requser file includes 1 route load empty form, , 2 post routes handle input 1 of 2 forms. requser.js

// module imports // var express = require('express'); var router = express.router();   // request user form // router.get('/', function(req, res, next) {     res.render('requser', {         title: 'user request'     }); });   // post /direct-user // router.post('/direct-user', function(req, res) {     // validate form contents     // ...      // assuming     console.log('direct user requested');     res.send('cool'); });  // post other-user // router.post('/other-user', function(req, res) {     // validate form contents     // ...      // assuming     console.log('other user requested');     res.send('cool'); });  module.exports = router; 

and lastly, form view/template. requser.hbs

<div class="container"> <h1>user request</h1>  <!-- start of direct user creation form //////////////////////////////// --> <form method="post" action="/direct-user">     <!-- first name, last name -->     <!-- ... -->      <!-- submit button -->     <div class="row">         <div class="col-md-11">             <div class="form-group">                 <button type="submit" class="btn btn-custom">submit</button>             </div>         </div>     </div> <!-- end row --> </form> <!-- end form -->   <!-- start of other user creation form //////////////////////////////// --> <form method="post" action="/other-user">     <!-- first name, last name -->     <!-- ... -->      <!-- submit button -->     <div class="row">         <div class="col-md-11">             <div class="form-group">                 <button type="submit" class="btn btn-custom">submit</button>             </div>         </div>     </div> </div> <!-- end container --> 

you using routing middleware in incorrect way.

app.use('/user/:id', require('./routes/user')); app.use('/user-update', require('./routes/user')); app.use('/requser', require('./routes/requser')); app.use('/direct-user', require('./routes/requser')); app.use('/other-user', require('./routes/requser')); 

these lines problematic ones.

let's take 1 of these example, third one, 1 enough take care of /direct-user , /other-user endpoints.

what line tells express is:

when request hits server path starts /requser, pass request requser router middleware , handle rest.

let's request path /requser/direct-user. request passed requser middleware , middleware match remaining part (/direct-user) , correctly invoke relevant callback.

without knowing form posts data, can't further. should check both forms post data /requser/direct-user , /requser/other-user, respectively , should work.


Comments