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