2016-10-30 5 views
0

nodejs、express、およびmongodbを使用してWebアプリケーションをビルドしています。私は初心者です。nodejs:res.redirectを使用したルーティングが動作していない404が見つからない

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 expressValidator=require('express-validator'); 
var expressSession=require('express-session'); 
var login = require('./routes/login'); 
var homepage = require('./routes/homepage'); 
var searchStudents=require('./routes/searchStudents'); 
var addStudents=require('./routes/addStudents'); 
var editStudents=require('./routes/editStudents'); 
var app = express(); 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 
//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(expressValidator()); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(expressSession({secret:'max',saveUninitialised:false,resave:false})); 
app.use('/', login); 
app.use('/homepage', homepage); 
app.use('/homepage/SearchStudents',searchStudents); 
app.use('/homepage/addStudents',addStudents); 
app.use('/homepage/editStudents',editStudents); 
app.use(function(req, res, next) { 
var err = new Error('Not Found'); 
err.status = 404; 
next(err); 
}); 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, 
    error: err 
    }); 
}); 
} 
app.use(function(err, req, res, next) { 
res.status(err.status || 500); 
res.render('error', { 
message: err.message, 
error: {} 
}); 
}); 
module.exports = app;` 

私の見解は私のルートに似た名前を持つ: これは私のapp.jsです。 投稿方法 を使用してログインからホームページにリダイレクトすることはできますが、ホームページからsearchStudents.Itに404エラー をリダイレクトすることはできません。これは私のhomepage.ejs

ある

var express = require('express'); 
var router = express.Router(); 
router.get('/', function(req, res, next) { 
res.render('homepage'); 
}); 
router.post('/homepage/searchStudents', function(req, res, next) { 
res.redirect('/homepage/searchStudents'); 
}); 
module.exports = router; 

:これは私のhomepage.jsある

var express = require('express'); 
var router = express.Router(); 
var item; 
var output=null; 
var mongo =require('mongodb').MongoClient; 
var assert=require('assert'); 
var url='mongodb://localhost:27016/test'; 
/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('login'); 

}); 
router.post('/hompage', function(req, res, next) { 
    item={ 
     user:req.body.username, 
     password:req.body.password 
    }; 
    console.log("this is the username/// "+item.user); 
    mongo.connect(url,function(err,db){ 
     assert.equal(null,err); 
     result=db.collection('users').findOne({username:item.user},{id:0,password:0},function(err,data){ 
     if(err) 
     { 

      db.close(); 
      res.redirect('/'); 
     } 
     else if(data==null) 
     { 
      db.close(); 
      res.redirect('/'); 
     } 
     else 
     { 
      //console.log(data); 
      db.close(); 
      res.redirect('/homepage'); 

     } 

}); 
     }); 

}); 

これは私のlogin.ejs

<!DOCTYPE html> 
<html> 
<head> 
<title></title> 
<link rel='stylesheet' href='/stylesheets/style.css' /> 
</head> 
<body> 

<h1 align="center">Login Page</h1> 
<form action="/hompage" method="post"> 
<table align="center"> 
<tr> 
<td><i>Enter Username</i> 
</td> 
<td>   
<input type="text" name="username" placeholder="enter username"> 
</td> 
</tr> 
<tr> 
<td><i>Enter Password</i></td> 
<td>  
<input type="password" name="password" placeholder="enter password"> 
</td> 
</tr> 
<tr> 
<td> 
<input type="submit" value="submit"> 
</td> 
</tr>  
</table> 
</form> 

</body> 
</html> 

です: これが私のlogin.jsです

<html> 
<head> 
</head> 
<body> 
<h1>homepage</h1> 
<form action="/homepage/searchStudents" method="post"> 
<input type="submit" value="Search Studetns"> 
</form> 
<form action="/homepage/addStudents" method="post"> 
<input type="submit" value="Add Studetns"> 
</form> 

</body> 
</html> 
+0

一貫性のインデントを使用してブレースの間違いを見つける/見て、あなたのコードが読みやすくかつ容易になるだろう。 – jfriend00

+0

また、あなたの 'app.use()'ルートの多くは 'app.get()'でなければなりません。 'app.use()'はミドルウェア用であり、通常のルート定義用ではありません。 – jfriend00

答えて

0

ワウ..あなたのコードは少し乱雑ですが、あなたの404ハンドラで間違いを犯したので、next()関数を使ってthrowを渡しているので、404を取得したときにリダイレクトする代わりに、それを傍受してカスタム404ページをレンダリングすることができます。

それらのステータスページ(404および500)を傍受する方法の例は次のようになります。

// Handle 404 
app.use(function(req, res) { 
    res.status(400); 
    res.render('errors/404', { title: '404' }); 
}); 

// Handle 500 
app.use(function(error, req, res, next) { 
    console.log(error); 
    res.status(500); 
    res.render('errors/500', { title: '500' }); 
}); 
関連する問題