I am learning Node.js through a tutorial to build a simple API. I have my own postgres db and I am trying to retrieve a table and not use the sample db/dummy db in the tutorial. I am following everything in the tutorial, only thing is I am using my own db and getting 404 not found error.

My Index.js

var express = require('express');
var router = express.Router();

var db = require('../queries');

router.get('/api/preference', function(req,res){ res.send('hi'); })


module.exports = router;

Queries.js

var promise = require('bluebird');

var options ={
    //Initialization options
    promiseLib : promise
};

var pgp = require('pg-promise')(options);
var db = pgp({
    host: 'localhost',
    port: 5432,
    database: 'pmc',
    user: 'tarun',
    password: 'pes'
});
var connectionstring = 'postgres://tarun:pes@localhost:5432/pmc';
var db = pgp(connectionstring);


//add query funtions

module.exports = {
    getAllPreference : getAllPreference
};


function getAllPreference(req,res,next){
    db.any('select * from core.preferences')
      .then(function(data){
        res.status(200)
           .json({
               status : 'success',
               data : data,
               message: 'Retrieved ALL preferences'
           });
      })
      .catch(function (err) {
        return next(err);
      });
}

app.js

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 index = require('./routes/index');
var users = require('./routes/users');

var app = express();



// 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(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);
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 handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

Error

Error: Not Found at D:\node-postgress-promises\app.js:32:13 at Layer.handle [as handle_request] (D:\node-postgress-promises\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (D:\node-postgress-promises\node_modules\express\lib\router\index.js:317:13) at D:\node-postgress-promises\node_modules\express\lib\router\index.js:284:7 at Function.process_params (D:\node-postgress-promises\node_modules\express\lib\router\index.js:335:12) at next (D:\node-postgress-promises\node_modules\express\lib\router\index.js:275:10) at D:\node-postgress-promises\node_modules\express\lib\router\index.js:635:15 at next (D:\node-postgress-promises\node_modules\express\lib\router\index.js:260:14) at Function.handle (D:\node-postgress-promises\node_modules\express\lib\router\index.js:174:3) at router (D:\node-postgress-promises\node_modules\express\lib\router\index.js:47:12)

Blockquote

share|improve this question
    
You should console.log the err before returning like .catch(function (err) { console.log(err); return next(err); });. This will tell you what the error actually is. Surely it's not 404. – Talha Awan 11 hours ago
    
The database part got nothing to do with HTTP error 404. – vitaly-t 10 hours ago
    
@vitaly-t any inputs sire? – OLDMONK 10 hours ago
    
@OLDMONK that was the input. Focus on your HTTP service part, forget the database part, as it is unrelated here. Something in your HTTP service is wrong. – vitaly-t 10 hours ago
    
@vitaly-t something wrong with the route sir?i am new to this sir..so kinda looking for expert like you share some insights – OLDMONK 10 hours ago

Change this portion of code as follow

exports.getAllPreference = function(req,res,next){
    console.log('h');
    db.any('select * from core.preferences')
      .then(function(data){
        res.status(200)
           .json({
               status : 'success',
               data : data,
               message: 'Retrieved ALL preferences'
           });
      })
      .catch(function (err) {
        next(err);
      });
}

Remove below code in this file

module.exports = {
            getAllPreference= getAllPreference
}

Change your index.js file Remove below lines

module.exports = {
getAllPreference: getAllPreference
};

function getAllPreference(req, res, next) {};

And uncomment

module.exports = router;

Add below code for testing purpose. in index.js file

router.get('/api/preference', function(req,res){
     res.send('hi');

};
share|improve this answer
    
give your last trial at this. Also please say about the console.log written in getAllPreference. – Sunil Prajapati 11 hours ago
    
calling this localhost:3000/api/preference console.log returns nothing – OLDMONK 11 hours ago
    
you are not able to reach, getAllPreference function. – Sunil Prajapati 11 hours ago
    
i think thats the case sir..i am used to to asp.net webapi..trying my hand in node for the first time..i am so confused now..is there prob with my route? – OLDMONK 11 hours ago
    
so localhost:3000 returns Welcome to Express but localhost:3000/api/preference returns nothing – OLDMONK 11 hours ago

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.