2016-07-16 9 views
-2

Ich bin ein Begginer in Nodejs. Ich habe eine einfache API, die Sie mit einem Reisepass anmeldet und Sie zu/collections weiterleitet. Das Teil funktioniert gut, das Problem in POST-Anfragen, dieKnoten js Express-Routing [Kann nicht erhalten:/Sammlung #]

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 Fehler zurück:

Cannot GET /collection 

ich Anfragen haben versucht sendig POST von Postbote, die mir ein 404.

var auth = express.Router(); 
gibt

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

Server Routen:

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 Weg funktioniert gut. Es akzeptiert Auth-Datei mit Anmeldeinformationen und Pass, die Auth-Anmeldeinformationen verwendet. Bei Erfolg wird es zu/collections umgeleitet. 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'); 
}) 
}; 

Nun ist dies sicher:

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); 


} 

die Sammelmodul Funktionen reagieren nur mit einem res.json({id:req.params.id});

Die Umleitung von/auth/Sammlungen ist in Ordnung, aber auf POST/Sammlung Ich bekomme die genannten Fehler. Hatte jemand ein ähnliches Problem?

Antwort

2

Versuchen var collection = require('../models/collection'); .. anstelle von.

Dies ist, weil die Anforderung der relative Pfad von der Datei, die Sie nicht in Stammverzeichnis sind.

1
var collection = require('../models/collection'); 

Source code link

Node.js require() verwendet die Commonjs Syntax und alle Pfad zur Datei relativ sein, wo es aus aufgerufen wird.

Siehe docs.