Im having an weird issue, or maybe I'm missing something so could you please help!
The issue is that I have deployed my database on mLab and configured my app.js so it can run it:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var api = require('./routes/api');
var routes = require('./routes/index');
var users = require('./routes/users');
var session = require('express-session');
var app = express();
app.use('/api', api);
var mongoose = require('mongoose');
mongoose.connect('mongodb://<user>:<pass>@ds019624.mlab.com:19624/heroku_b036xcp8');
var db = mongoose.connecetion;
app.use(cookieParser());
app.use(session({ secret: 'sesija', cookie: { maxAge: 60000 }, resave: true, saveUninitialized: true }));
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
as you can see there is a line which says app.use('/api', api);
and this is my API which is in my routes folder. the current Folder structures is something like this:
-- models
-- views
-- routes
----- api.js
-- app.js
the api.js is in the routes folder.
When i do localhost/api/something i get the result of the API however on heroku I get a timeout error, is there something wrong in the code or in the folderstructure?
EDIT: api.js
var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Page= require('../models/page.js');
var adminUser= require('../models/admin-users.js');
var bodyParser = require('body-parser').json();
var bcrypt = require('bcrypt-nodejs');
/* User Routes. */
router.get('/admin', function(req, res) {
res.send('Welcome to the API zone');
});
router.get('/pages', function(request, response) {
return Page.find(function(err, pages) {
if (!err) {
return response.send(pages);
} else {
return response.send(500, err);
}
});
});
router.post('/pages/add',bodyParser, function(request, response) {
var page = new Page({
title: request.body.title,
url: request.body.url,
content: request.body.content,
menuIndex: request.body.menuIndex,
date: new Date(Date.now())
});
page.save(function(err) {
if (!err) {
return response.send(200, page);
} else {
return response.send(500,err);
}
});
});
router.post('/pages/update',bodyParser, function(request, response) {
var id = request.body._id;
var newid = mongoose.Types.ObjectId();
Page.update({
_id: id
}, {
$set: {
title: request.body.title,
url: request.body.url,
content: request.body.content,
menuIndex: request.body.menuIndex,
date: new Date(Date.now())
}
}).exec();
response.send("Page updated");
});
router.get('/pages/delete/:id', bodyParser, function(request, response) {
var id = request.params.id;
Page.remove({
_id: id
}, function(err) {
return console.log(err);
});
return response.send('Page id- ' + id + ' has been deleted');
});
// -----
router.get('/pages/admin-details/:id', bodyParser, function(request, response) {
var id = request.params.id;
Page.findOne({
_id: id
}, function(err, page) {
if (err)
return console.log(err);
return response.send(page);
});
});
router.get('/pages/details/:url', function(request, response) {
var url = request.params.url;
Page.findOne({
url: url
}, function(err, page) {
if (err)
return console.log(err);
return response.send(page);
});
});
//Admin panel login
router.post('/add-user', bodyParser, function(request, response) {
var salt, hash, password;
password = request.body.password;
salt = bcrypt.genSaltSync(10);
hash = bcrypt.hashSync(password, salt);
var AdminUser = new adminUser({
username: request.body.username,
password: hash
});
AdminUser.save(function(err) {
if (!err) {
return response.send('Admin User successfully created');
} else {
return response.send(err);
}
});
});
router.post('/login', bodyParser ,function(request, response) {
console.log("this is login api");
var username = request.body.username;
var password = request.body.password;
adminUser.findOne({
username: username
}, function(err, data) {
if (err | data === null) {
return response.send(401, "User Doesn't exist");
} else {
var usr = data;
if (username == usr.username && bcrypt.compareSync(password, usr.password)) {
// request.session.regenerate(function() {
// request.session.user = username;
return response.send(username);
//});
} else {
return response.send(401, "Bad Username or Password");
}
}
});
});
router.get('/logout', function(request, response) {
request.session.destroy(function() {
return response.send(401, 'User logged out');
});
});
function sessionCheck(request,response,next){
//check cookie
if(request.session.user) next();
else response.send(401,'authorization failed');
}
module.exports = router;
Error on Heroku:
2016-06-26T18:17:07.046803+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/api/pages" host=app.herokuapp.com request_id=f314665a-9378-437a-a648-c388391fd4c1 fwd="109.163.155.179" dyno=web.1 connect=0ms service=30001ms status=503 bytes=0
Aucun commentaire:
Enregistrer un commentaire