I’m writing up an API as part of a tutorial. My GET and DELETE processes work fine, but anything that requires parsed JSON doesn’t seem to be working.
Here’s my server:
var express = require('express');
var morgan = require('morgan');
var dishRouter = require('./dishRouter');
var promoRouter = require('./promoRouter');
var leaderRouter = require('./leaderRouter');
var hostname = 'localhost';
var port = 3000;
var app = express();
app.use(morgan('dev'));
app.use(express.static(__dirname + '/public'));
app.use('/dishes', dishRouter);
app.use('/promotions', promoRouter);
app.use('/leadership', leaderRouter);
app.listen(port, hostname, function() {
console.log(`Server running at http://${hostname}:${port}/`);
});
All three of my modules are exactly the same minus that they use different terminology in their returned strings. For example, here is promoRouter.js:
var express = require('express');
var bodyParser = require('body-parser');
var promoRouter = express.Router();
promoRouter.use(bodyParser.json());
promoRouter.route('/')
.all(function(request, response, next) {
response.writeHead(200, {'Content-Type': 'text/plain'});
next();
})
.get(function(request, response, next) {
response.end('Will send all the promos to you!');
})
.post(function(request, response, next) {
response.end('Will add the promo: ' + request.body.name + ' with details: ' + request.body.description);
})
.delete(function(request, response, next) {
response.end('Deleting all promos');
});
promoRouter.route('/:promoId')
.all(function(request, response, next) {
response.writeHead(200, {'Content-Type': 'text/plain'});
next();
})
.get(function(request, response, next) {
response.end('Will send details of the promo: ' + request.params.promoId + ' to you!');
})
.put(function(request, response, next) {
response.write('Updating the promo: ' + request.params.promoId + '\n');
response.end('Will update the promo: ' + request.body.name + ' with details: ' + request.body.description);
})
.delete(function(request, response, next) {
response.end('Deleting promo: ' + request.params.promoId);
});
module.exports = promoRouter;
When I test my POST and PUT commands using Postman, I get a string with undefined
in place of where I should be seeing request.body.name
and request.body.description
:
Will add the promo: undefined with details: undefined
So I’m leaning toward that I’ve misused body-parser somehow as that is supposed to parse out the JSON in the request so that each part is available for my response to the client. I’ve double checked and body-parser does exist in my node_modules folder.