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
Post a Comment