javascript - Express.js POST method doesn't work -


i'm trying make discussion-based node.js/express-app , i'm working on page create discussion. testing if discussion controller file linked, everytime click button post form, doesn't anything.

my pug (view), called 'createdisc.pug'

extends layout block content     h1 create new discussion     form(action='', method='post')     div         label(for='title') title         input#title     div         label(for='desc') description         input#desc     div         input(type='submit', value='create') 

my router, called 'createdisc.js'

var express = require('express'); var router = express.router(); var disc = require('../controllers/disc');  router.get('/discussion/create', function (req, res, next) {     res.render('createdisc'); });  router.post('/discussion/create', disc.createdisc);  module.exports = router; 

my controller called 'disc.js' i'm trying send 'test' console

exports.createdisc = function (req, res, next) {     console.log('test'); }; 

my app.js file

const express = require('express'); const bodyparser = require('body-parser'); const mongoose = require('mongoose'); const passport = require('passport'); const path = require('path'); const cookieparser = require('cookie-parser'); const session = require('express-session');  const app = express();  const db = require('./controllers/db');  require('./config/passport')(passport);  mongoose.connect(db.url);  app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'pug');  app.use(bodyparser.json()); app.use(express.static(path.join(__dirname, 'public'))); app.use(bodyparser.urlencoded({extended: true})); app.use(cookieparser()); app.use('/', require('./routes/createdisc'));  app.listen(3000, function() {     console.log('example listening on port 3000!') }) 

you mentioned /discussion/create get route , linking express router like:

router.get('/discussion/create', function (req, res, next) {     res.render('createdisc'); });  router.route('/discussion/create', disc.createdisc); 

so in reality, enabling route like:

get /discussion/create/discussion/create

please try .post() hook , use like:

router.post('/', function (req, res, next) {     res.render('createdisc'); });  router.route('/discussion', disc.createdisc); 

reference: http://expressjs.com/en/guide/routing.html

tip: please refer link making more meaningful routes. https://github.com/squareboat/api-guidelines#http-methods

update #1

currently, in html(pug) form, have action='', means form making request post /.

please change action value action='/discussion/create' , try again.

update #2

i have made trimmed down version of code(without view or db), , it's working perfectly. can see code here.

routes test are:

get http://localhost:3000/discussion/create  post http://localhost:3000/discussion/create 

update #3

in pug file, indentation wrong because of input fields not enclosed inside form tag. had empty form.

extends layout block content     h1 create new discussion         form(action='/discussion/create', method='post')             div                 label(for='title') title                 input#title             div                 label(for='desc') description                 input#desc             div                 input(type='submit', value='create') 

this work.


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -