-2

I am a begginer in nodejs. I have a simple api that logs you in with passport, redirects you to /collections. That part works fine, the problem is in POST requests which return

    Error: Not Found
   at D:\Movie API\src\server\server.js:44:15
   at Layer.handle [as handle_request] (D:\Movie API\src\server\node_modules\express\lib\router\layer.js:82:5)
   at trim_prefix (D:\Movie API\src\server\node_modules\express\lib\router\index.js:302:13)
   at D:\Movie API\src\server\node_modules\express\lib\router\index.js:270:7
   at Function.proto.process_params (D:\Movie API\src\server\node_modules\express\lib\router\index.js:321:12)
   at next (D:\Movie API\src\server\node_modules\express\lib\router\index.js:261:10)
   at D:\Movie API\src\server\node_modules\express\lib\router\index.js:603:15
   at next (D:\Movie API\src\server\node_modules\express\lib\router\index.js:246:14)
   at D:\Movie API\src\server\routes\secure.js:8:11
   at Layer.handle [as handle_request] (D:\Movie API\src\server\node_modules\express\lib\router\layer.js:82:5)
   at trim_prefix (D:\Movie API\src\server\node_modules\express\lib\router\index.js:302:13)
   at D:\Movie API\src\server\node_modules\express\lib\router\index.js:270:7
   at Function.proto.process_params (D:\Movie API\src\server\node_modules\express\lib\router\index.js:321:12)
   at next (D:\Movie API\src\server\node_modules\express\lib\router\index.js:261:10)
   at Function.proto.handle (D:\Movie API\src\server\node_modules\express\lib\router\index.js:166:3)
   at router (D:\Movie API\src\server\node_modules\express\lib\router\index.js:35:12)

withot Error :

Cannot GET /collection

I have tried sendig POST requests from postman which gives me an 404.

var auth = express.Router();

require('./routes/auth.js')(auth, passport); app.use('/auth', auth);

server routes:

var auth = express.Router();
require('./routes/auth.js')(auth, passport);
app.use('/auth', auth);

var secure = express.Router();
require('./routes/secure.js')(secure);
app.use('/', secure);

auth path is working fine. It accepst auth file with credentials, and passport whic uses auth credentials. On success it redirects to /collections. auth:

module.exports = function(router, passport){

router.get('/', function(req, res){
    res.render('index.ejs');
});

router.get('/google', passport.authenticate('google', {scope: ['profile', 'email']}));

router.get('/google/callback', 
  passport.authenticate('google', { successRedirect: '/collections',
                                      failureRedirect: '/' }));


router.get('/logout', function(req, res){
    req.logout();
    res.redirect('/');
})

router.get('/*', function(req, res){
    res.redirect('/auth');
})
};

Now this is secure :

module.exports = function(router, passport){

router.use(function(req, res, next){
    if(req.isAuthenticated()){
        return next();
    }

    res.redirect('/auth');
})

// Get all collections
router.get('/collections', collection.getAll);

// Create a collection
router.post('/collection', collection.create);
// Get one product, update one product, delete one product
router.route('/collection/:id')
    .get(collection.read)
    .put(collection.update)
    .delete(collection.delete);


}

the collection module functions are just responding with a res.json({id:req.params.id});

The redirection from /auth to /collections is ok, but on POST /collection I get the mentioned errors. Did anyone have a simillar issue ?

Jatin Balodhi
  • 152
  • 5
  • 18
user2153675
  • 103
  • 7

2 Answers2

2

Try var collection = require('../models/collection'); .. instead of .

This is because the require is the relative path from the file you are in not from root directory.

Charlie Fish
  • 18,491
  • 19
  • 86
  • 179
1
var collection = require('../models/collection');

Source code link

Node.js require() uses the CommonJS syntax and all path will be relative to the file where it is being called from.

See the docs.

Iceman
  • 6,035
  • 2
  • 23
  • 34