suzane
suzane

Reputation: 13

Nodejs Express Cannot Post

I'm new to NodeJs and Express. Sorry if I'm asking in a wrong way. I've got a blockchain application using solidity and NodeJs. I got a problem with NodeJs part which is use to make a CRUD. But i always get an error 'Cannot POST' and in my console its show 'POST 404 (Not Found). Seems like my HTML form cannot find the POST route in NodeJs, Im not sure. Please help, thanks.

HTML

<form action="/elections/add" method="post"> 
                <div class="row">
                    <div class="col-lg-12">
                        <div class="card mb-4">
                            <div class="card-header">
                                New Election
                            </div>
                            <div class="card-body">
                                <div class="form-group">Election Name
                                    <input type="text" class="form-control form-control-user" 
                                    id="election_name" name="election_name">
                                </div>  
                                </div>

                                                                            
                            </div>
                        </div>
                    </div>                    

                <!-- Content Row --> 
                </div>                   
                </form>

routes/regElections.js

var express = require('express');
var router = express.Router();
var dbConn  = require('../lib/db');

// add a new 
router.post('/add', function(req, res, next) {    

let election_name = req.body.election_name;
let errors = false;

if(election_name.length === 0) {
    errors = true;

    // set flash message
    req.flash('error', "Please enter election name");
    // render to add.ejs with flash message
    res.render('elections/add', {
        election_name: election_name
    })
}

// if no error
if(!errors) {

    var form_data = {
        election_name: election_name
    }
    
    // insert query
    dbConn.query('INSERT INTO election SET ?', form_data, function(err, result) {
        //if(err) throw err
        if (err) {
            req.flash('error', err)
             
            // render to add.ejs
            res.render('elections/add', {
                election_name: form_data.election_name                   
            })
        } else {                
            req.flash('success', 'Election successfully added');
            res.redirect('/elections');
        }
    })
}
})

app.js

[enter image description here][1]var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var flash = require('express-flash');
var session = require('express-session');
var mysql = require('mysql');
var connection  = require('./lib/db');

var elecRouter = require('./routes/regElections');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use(session({ 
    cookie: { maxAge: 60000 },
    store: new session.MemoryStore,
    saveUninitialized: true,
    resave: 'true',
    secret: 'secret'
}))

app.use(flash());

//app.use('/', indexRouter);
//app.use('/users', usersRouter);
app.use('/regElections', elecRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

My project folder

Upvotes: 1

Views: 1723

Answers (1)

KaranKataria77
KaranKataria77

Reputation: 47

CANNOT POST 404 happens when there is something wrong in your route mainly due to naming problem. I think you are making post request on route /elections/add in html form. and in node.js file your route is /regElections/add.

So in your HTML form shoule look like this: action="/regElections/add"

Upvotes: 1

Related Questions