Dhung
Dhung

Reputation: 11

NODEJS: req.body.InputName => undefinded

this my controller

//...
if (req.method == 'POST') {
        try {
            //..
            console.log(req.body.customerName);
}

I was trying to see if the req.body returned data but it returned undefined
this my route

var express = require('express');
var router = express.Router()
//...
router.get('/add-bill',check_login.yeu_cau_dang_nhap, billController.addBill);
router.post('/add-bill',check_login.yeu_cau_dang_nhap, billController.addBill);
//use body-parser in app.js

var app = express();
//...
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json());
//...

i tried installing "body-parser" library but it doesn't work

Upvotes: -1

Views: 39

Answers (1)

num8er
num8er

Reputation: 19372

To parse mutlipart-form You've to install multer, for other body types body-parser

If Your form sends only text fields then change enctype="application/x-www-form-urlencoded" in form tag and no need for multer cause body-parser works perfect with non multipart enctype.

But if Your form has file input, then You've to use multer.

2 solutions:

  1. simply add multer.none() at parent level:
const app = express();
const multer = require('multer');
//...
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json());
app.use(multer.none());
  1. You can add it to inner route:
const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
const fs = require('fs');

const homeController = require('../controllers/homecontroller');
const billController = require('../controllers/lichdatcontroller');
const check_login = require('../middlewares/check_login');

const router = express.Router();

router.get(
  '/add-bill',
  check_login.yeu_cau_dang_nhap, 
  billController.addBill);


const billsDir = __dirname__ + '/../uploads/bills';
try {
  fs.mkdirSync(billsDir, { recursive: true });
}
catch (e) {}

router.post(
  '/add-bill',
  check_login.yeu_cau_dang_nhap,
  bodyParser.urlencoded({ extended: false }), //  <-- if enctype not multipart 
  multer({ dest: billsDir }),                 //  <-- if form is multipart
  billController.addBill);

module.exports = router;

also, create getBill method in billController and don't use req.method === 'POST' cause You're already doing by router.post

Upvotes: 1

Related Questions