0

I am working on Nodejs(Express.js),I am sending Form data to controller but not working for me,I am getting error "TypeError: Cannot read property 'name' of undefined in Nodejs", But Main problem is my code is working/getting data in "app.js" but i want to get data in "userController" because i want to use MVC strtucre,Here is my root.js

var express=require('express');
var router= express.Router();
var controllers= require('../controllers');
router.get('/', controllers.homeController.index);
router.get('/signup', controllers.userController.signup);
router.post('/signup', controllers.userController.save);
router.get('/login', controllers.userController.login);
router.get('/dash', controllers.userController.dash);
module.exports = router;

Here is my userController.js file

userController.save = function (req, res, next) {
    var name = req.body.name;
    console.log(name);   
}

Here is my app.js, How can i get data in "userController" instead of "app.js",Thank you in advance.

const express = require('express');
const mysql = require('mysql');
const expressValidator = require('express-validator');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const flash = require('connect-flash');
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use('/', routes);
app.set('view engine', 'pug');
app.set('views', path.join(__dirname, 'views'));
app.use(express.static(__dirname + '/public'));
app.use(cookieParser('keyboard cat'));
const PORT = 4000
app.listen(PORT, function (err) {
  if (err) console.log(err);
  console.log("App started on PORT", PORT);
});

1 Answer 1

1

I have reorganized your codes. Please make sure your filte path declaration is correct.

    var express=require('express');
    var router = express.Router();
    var controllers= require('../controllers/userController'); // if userController.js in controller folder.
    router.get('/', controllers.homeController_index);
    router.get('/signup', controllers.userController_signup);
    router.post('/signup', controllers.userController_save);
    router.get('/login', controllers.userController_login);
    router.get('/dash', controllers.userController_dash);
    module.exports = router;

userController.js

const userController_save = function (req, res, next) {
    var name = req.body.name;
    console.log(name);   
}

app.js

    const express = require('express');
    const mysql = require('mysql');
    const expressValidator = require('express-validator');
    const bodyParser = require('body-parser');
    const cookieParser = require('cookie-parser');
    const session = require('express-session');
    const flash = require('connect-flash');
    const path = require("path");
    const app = express();

    const routes = require('./routes/root'); // If your root.js inside a routes folder

    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    
    app.set('view engine', 'pug');
    app.set('views', path.join(__dirname, 'views'));
    app.use(express.static(__dirname + '/public'));
    app.use(cookieParser('keyboard cat'));

    app.use('/', routes);

    const PORT = 4000
    app.listen(PORT, function (err) {
      if (err) console.log(err);
      console.log("App started on PORT", PORT);
    });
Sign up to request clarification or add additional context in comments.

4 Comments

My root.js file inside "routes" folder(in root) and "userController" file inside "controllers" folder(in root)
Understood, then the amended codes should be working fine now after you have started the server.
means your code ? you checked somewhere ?
Yes, I have tested it in my system. It can print out the req.body.name in console/terminal but I am using EJS Templating Engine, so I just change from pug to ejs and test out.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.