Getting "404 Not Found" when trying to call my node.js REST API after integrating Swagger

2,686 views
Skip to first unread message

Marieke Westerheide

unread,
Mar 25, 2015, 12:39:24 PM3/25/15
to swagger-sw...@googlegroups.com

Hi,

I followed the steps given in https://github.com/swagger-api/swagger-node-express to integrate swagger into my existing node application, but I'm stuck now getting a "404 Not Found" response when trying to call my API (from a REST client). (It worked before adding swagger-node-express.) What am I missing?

Here are the relevant lines of my code:
var express = require('express'),
path = require('path'),
cookieParser = require('cookie-parser'),
bodyParser = require('body-parser');

var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// middleware that allows cross origin requests and token headers
app.all('/*', function (req, res, next) {
// CORS headers
res.header("Access-Control-Allow-Origin", "*"); // restrict it to the required domain
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
// Set custom headers for CORS
res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key');
if (req.method == 'OPTIONS') {
res.status(200).end();
} else {
next();
}
});
app.use(function (req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});

var swagger = require("swagger-node-express").createNew(app);
var models = require("./models.js");
swagger.addModels(models);

var paramTypes = swagger.paramTypes;
var swe = swagger.errors;

var addEventSeries = {
'spec': {
"description" : "Operations about pets",
"path" : "/account/{accountId}/eventseries",
"notes" : "Returns a pet based on ID",
"summary" : "Find pet by ID",
"method": "POST",
"parameters" : [paramTypes.path("accountId", "ID of pet that needs to be fetched", "string"), paramTypes.body("body", "Pet object that needs to be added to the store", "EventSeries")],
"responseMessages" : [swe.invalid('input')] ,
"nickname" : "createEventSeries"
},
'action': function (req,res) {
var body = req.body;
if(typeof body === 'undefined' || typeof body.id === 'undefined'){
throw swe.invalid('EventSeries', res);
} else{
res.send(JSON.stringify(body));
}
}
};

swagger.addPost(addEventSeries);
swagger.configure("http://localhost", "0.1");

app.set('port', process.env.PORT || 9500);
var server = app.listen(app.get('port'), function () {
console.log('Express server listening on port ' + server.address().port);
});


My API call is:
http://localhost:9500/account/asdfghjkl/eventseries/

Body is:
{
"name": "Series Name",
"active": true
}

Stack trace:
Error: Not Found
at app.use.res.render.message (/Users/Developer/affapi/server.js:111:15)
at Layer.handle [as handle_request] (/Users/Developer/affapi/node_modules/express/lib/router/layer.js:82:5)
at trim_prefix (/Users/Developer/affapi/node_modules/express/lib/router/index.js:270:13)
at /Users/Developer/affapi/node_modules/express/lib/router/index.js:237:9
at Function.proto.process_params (/Users/Developer/affapi/node_modules/express/lib/router/index.js:312:12)
at /Users/Developer/affapi/node_modules/express/lib/router/index.js:228:12
at Function.match_layer (/Users/Developer/affapi/node_modules/express/lib/router/index.js:295:3)
at next (/Users/Developer/affapi/node_modules/express/lib/router/index.js:189:10)
at /Users/Developer/affapi/server.js:93:9
at /Users/Developer/affapi/modules/JWT/controller.js:25:13


Console log:
app.get('env'):development
API Authenticator mounted
Express server listening on port 9500

POST /account/affilitix-services/eventseries/ 404 42.438 ms - 1175

Any help on this would be highly appreciated.


Thanks!
Marieke

tony tam

unread,
Mar 26, 2015, 12:24:59 PM3/26/15
to swagger-sw...@googlegroups.com
Hi, swagger-node-express is not proper node middleware.  It will be in the future but until then, I suggest looking at swagger-tools from Apigee's a127 project.
Reply all
Reply to author
Forward
0 new messages