2017-02-19 8 views
0

私は最初のノードプロジェクトを設定しています。私はいくつかのことを周りに動かすまで、すべてのページをうまく処理していました。私はindex.jsの異なるページのすべてのルーティングを行った。私はそれを変更し、ロジックのいくつかを分割するために私のrotesフォルダ内にlogin.jsファイルを作成しました。以前は、すべてのURLが正常に動作し、ページを表示していました。リファクタリング後、すべてのログインルートで404ページが見つかりませんでした。特定のルートは404エラーページに行きます

app.js:

var express = require('express'); 
var exphbs = require('express-handlebars'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var session = require('express-session'); 
var passport = require('passport'); 
var bodyParser = require('body-parser'); 

var routes = require('./routes/index'); 
var login = require('./routes/login'); 
//Using firebase initialized in config file. 
var database = require('./config/firebase'); 
var app = express(); 


///Setting stuff up here ..... 

app.use('/', routes); 
app.use('/login', login); 

app.use(function(req,res){ 
    res.status(404); 
    res.render('404'); 
}); 

module.exports = app; 

index.js:

var express = require('express'); 
var router = express.Router(); 
var csrf = require('csurf'); 
var csrfProtection = csrf(); 
var firebase = require('firebase'); 
var login = require('./login'); 


//tell express: All routes should be protected by csrf protection. 
router.use(csrfProtection); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('home', { title: 'Express' }); 
}); 

module.exports = router; 

login.js:

var express = require('express'); 
var router = express.Router(); 
var csrf = require('csurf'); 
var csrfProtection = csrf(); 
//Using firebase initialized in config file. 
var database = require('../config/firebase'); 

router.use(csrfProtection); 

router.get('/login', function(req, res, next) { 
    res.render('login', { title: 'Login' }); 
}); 

router.get('/forgotpassword', function (req,res){ 
    res.render('forgotpassword', {title:'Forgot Password'}) 
}); 

//ADD A TERMS PAGE TO SHOW TERMS AND CONDITIONS 
router.get('/signup', function (req,res){ 
    res.render('signup', {title:'Sign up', csrfToken: req.csrfToken()}); 
}); 

router.post('/signup', function(req, res, next){ 
    res.redirect('/'); 
}); 

module.exports = router; 

index.jsが正しくホームビューをレンダリングしています。/loginや/ signupのようなルートの残りはすべて404になり、私は理由を理解できないようです。

+0

問題は 'のvar csrfProtection = CSRF()である;'、あなたはと呼んでいます機能。代わりに 'var csrfProtection = csrf;'を試してください – Hosar

答えて

2

あなたはこれを行うと:

app.use('/login', login); 

あなたは/loginで始まるすべてのリクエストは、「ログイン」ルータに渡される必要があることExpressを言っています。そのルータで

は、任意のURLは、あなたがその /login接頭辞に相対的でなければならない扱いたいということだ(これもある ややhere説明しました)。言い換えれば

、あなたが/login自身のためのハンドラを追加したい場合は、あなたがこれを追加する必要があります。

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

私が正しくあなたを理解していればこれはまた、あなたのための問題を提示します、あなたはまた、すでに/loginという接頭辞が付けられているルータからは作成できない/signupのハンドラが必要です。あなたの場合、ルータは/login/signupのハンドラを作成しています。

あなたは/signupを処理し、このようにメインのアプリに添付するために別のルータが必要になるだろう:

app.use('/signup', signup); 
+0

ありがとうございます。それはとても役に立ちました。それでも新しいこと、そして私はこれらのことが相対的であることを忘れていました。意味をなさないそれは有り難いです。 – mufc

+0

実際に私は別の質問に従いました...私は私のホームスクリーンになりたい別の( '/')ルートにリダイレクトしようとすると、正しい問題に遭遇しますか? index.jsファイルに示されている/ routeにリダイレクトします – mufc

+0

@mufcリダイレクトはフルパス名を使用するので、(ルートからの) 'res.redirect( '/ signup')'を使うことができます。 – robertklep

関連する問題