2016-07-16 8 views
-2

私はnodejsのbegginerです。私はパスポートであなたを記録するシンプルなAPIを持っています。あなたを/ collectionsにリダイレクトします。私は404ノードjsエクスプレスルーティング[Can not GET:/ collection#]

var auth = express.Router(); 
与え配達員から

Cannot GET /collection 

私はsendig試してみましたPOSTリクエスト:その部分は、問題が

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エラーを返すPOSTリクエストである、正常に動作します

require( './ routes/auth.js')(auth、パスポート); app.use( '/ auth'、auth);

サーバールート:

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ファイルを作成し、認証情報を使用するパスポートを作成します。成功すると、/ collectionにリダイレクトされます。 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'); 
}) 
}; 

さて、これは安全である:

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


} 

収集モジュールの機能は、単にres.json({id:req.params.id});

で応答している/ AUTHへ/からのコレクションのリダイレクトはOKですが、POSTに/ collection私は上記のエラーが発生します。誰かが同じような問題を抱えていましたか?

答えて

2

Tryの代わりにvar collection = require('../models/collection');を試してください。

これは、ルートディレクトリからのファイルとの相対パスがrequireであるためです。

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

Source code link

Node.jsのrequire()はCommonJSの構文を使用し、すべてのパスが、それはから呼び出されているファイルへの相対になります。

docsを参照してください。

関連する問題