gripkash
gripkash

Reputation: 51

node js post not working with postman

I am trying to create a server for an app with a node JS server on AWS(not sure how relevant that is) and I am testing it with Postman. For some reason my hello world function, which is just a GET works perfectly but my POST to create a user keeps giving me this error:

TypeError: Cannot read property 'username' of undefined
    at app.get.params.QueueUrl (/home/ec2-user/Outfitr/Server/index.js:40:29)
    at Layer.handle [as handle_request] (/home/ec2-user/Outfitr/Server/node_modules/express/lib/router/layer.js:82:5)
    at next (/home/ec2-user/Outfitr/Server/node_modules/express/lib/router/route.js:110:13)
    at Route.dispatch (/home/ec2-user/Outfitr/Server/node_modules/express/lib/router/route.js:91:3)
    at Layer.handle [as handle_request] (/home/ec2-user/Outfitr/Server/node_modules/express/lib/router/layer.js:82:5)
    at /home/ec2-user/Outfitr/Server/node_modules/express/lib/router/index.js:267:22
    at Function.proto.process_params (/home/ec2-user/Outfitr/Server/node_modules/express/lib/router/index.js:321:12)
    at next (/home/ec2-user/Outfitr/Server/node_modules/express/lib/router/index.js:261:10)
    at serveStatic (/home/ec2-user/Outfitr/Server/node_modules/express/node_modules/serve-static/index.js:59:14)
    at Layer.handle [as handle_request] (/home/ec2-user/Outfitr/Server/node_modules/express/lib/router/layer.js:82:5)

Here is my code:

var express = require("express")
var app = express();
var gm = require("gm");
var fs = require("fs");
var async = require("async");

var s3 = new AWS.S3();

// set the region for the AWS API requests
AWS.config.region = 'us-west-2';

var DAO_QUEUE_URL = 'https://sqs.us-west-2.amazonaws.com/275333356355/DAO-Queue';

app.set('port', (process.env.PORT || 8080 ));
app.use(express.static(__dirname + '/public'));

app.get('/', function(request, response) {
  response.send('Hello World (Finally)');
});

app.post('/create_user', function( request, response) {

   process.stdout.write("WTF");

   create_user( request.body.username, request.body.password, request.body.firstname,    request.body.lastname, request.body.gender, request.body.latitude,
    request.body.longitude, request.body.description, request.body.city,
    request.body.state_province, request.body.country, request.body.email,
    request.body.phone_number);

    response.send('IT WORKED!');
});

function create_user( username, password, firstname, lastname, is_brand, gender,
   description, city, state_province, country, birthday) {

  messageBody = {"username":username, "password":password, "firstname": firstname,
   "lastname":lastname, "is_brand":is_brand, "gender":gender, "city":city,
   "state-province":state_province, "country":country, "birthday":birtyhday};
   queueUrl = DAO_QUEUE_URL;
   sendSQSMessage( JSON.stringify(messageBody),queueUrl);
}

What could be wrong?

Upvotes: 2

Views: 4155

Answers (1)

Gus Ortiz
Gus Ortiz

Reputation: 662

Make sure that you are using the x-www-form-urlencoded tab in postman. I've fallen for that a few times.

Also, make sure you are using the body-parser package.

var express = require("express")
var app = express();
var gm = require("gm");
var fs = require("fs");
var async = require("async");
var bodyParser = require('body-parser');

var s3 = new AWS.S3();

// set the region for the AWS API requests
AWS.config.region = 'us-west-2';

var DAO_QUEUE_URL = 'https://sqs.us-west-2.amazonaws.com/275333356355/DAO-Queue';

// Add the middleware
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.set('port', (process.env.PORT || 8080 ));
app.use(express.static(__dirname + '/public'));

So I think that you are getting the error because there is no middleware setting up a req.body object for you, bodyParser should do the trick.

Upvotes: 3

Related Questions