2017-11-25 5 views
0

フォームを含む/requestのページがあります。フォームメソッドはPOSTで、アクションは/requestです。 request.jsのPOSTハンドラでは、フォームデータ(DBなどに格納)で何かを実行し、/tripの別のページにリダイレクトすることです。Express.js HTTP 500エラー:ページがres.send( "Some text"); res.render( 'file')を使用するとエラーが発生します。

res.send(「ここではいくつかのテキスト)」を使用すると、GETハンドラは正常に動作します。 res.render( 'trips')を使用してページをレンダリングしようとすると、HTTP 500内部サーバーエラーが発生します。

はここrequest.jsのためのコードです:

var router = require('express').Router(); 


router.get('/', checkLoggedIn, function (req, res) { 
    res.render('request', { 
     user: req.user // get the user out of session and pass to template 
    }); 
}); 

router.post('/', checkLoggedIn, function (req, res) { 
    console.log(req.body); //data should be stored in DB 
    res.redirect('/trips'); //Should redirect to /trips after form 
submission. Why ERROR 500? 
}); 

function checkLoggedIn(req, res, next) { 
    if (req.isAuthenticated()) { 
     return next(); 
    } 
    //Redirect to home if not logged in 
    res.redirect('/'); 
} 

module.exports = router; 

ここtrips.jsためのコードです:

var router = require('express').Router(); 

router.get('/', checkLoggedIn, function(req, res) { 
    res.send("This is the trips route GET response!"); 
}); 

だから、一部上記と版画「これを作品トリップルートはGETレスポンスです!私はlocalhostのアクセス:私は代わりにこれを書いたときに、それは500ローカルホストは現在、この要求を処理することができない私にHTTPエラーを与える、しかし8000 /旅行(ナビゲーションバーから、またはフォームを送信することによって)

router.get('/', checkLoggedIn, function(req, res) { 
    res.render('trips'); 
}); 

を。

function checkLoggedIn(req, res, next) { 
    if (req.isAuthenticated()) { 
     return next(); 
    } 
    //Redirect to home if not logged in 
    res.redirect('/'); 
} 

module.exports = router; 

ここに私のtrips.ejs(コンテキスト用)ファイルです:

<!DOCTYPE html> 

<html lang="en"> 

<head> 

    <meta charset="utf-8"> 
    <!--<title><%= user.firstName %>'s Trips - Erkab</title>--> 

    <!--<meta name="viewport" content="width=device-width, initial-scale=1">--> 
    <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0"/> 
    <meta name="apple-mobile-web-app-capable" content="yes"/> 

    <link rel="stylesheet" href="/public/css/base.css"> 
    <link rel="stylesheet" href="/public/css/main.css"> 
    <link rel="stylesheet" href="/public/css/erkab.css"> 


    <script src="/public/js/modernizr.js"></script> 

</head> 

<body id="top" style="width: 100%"> 

<% include templates/header.ejs %> 

<% if (userType != "Rider") { 
    userType = "Driver"; 
} %> 

<div id="changeableView" class="container-fluid"> 
     <table class="table table-hover"> 
     <thead class="thead-inverse"> 
     <tr> 
      <th>#</th> 
      <th>USER TYPE</th> 
      <th>LOCATION</th> 
      <th>DATE</th> 
      <th>TIME</th> 
     </tr> 
     </thead> 
     <tbody> 
     <tr> 
      <th scope="row">1</th> 
      <td><%= userType %></td> 
      <td><%= points %> - <%= area %></td> 
      <td><%= date %></td> 
      <td><%= time %></td> 
     </tr> 
     </tbody> 
    </table> 
</div> 

<script src="/public/js/jquery-2.1.3.min.js"></script> 
<script src="/public/js/main.js"></script> 
</body> 
</html> 
+1

ノードコンソールにはどのようなエラーが記録されますか? EJSファイルが渡されていない変数を使用しようとすると、単純なことかもしれません。そのファイルの内容を 'Hello'のように変更して、レンダリングが正常に行われているかどうかを調べることができます。もしそうでなければ、設定 'views'と' view engine'を設定するために使ったコードを投稿して、正しく設定されているかを再確認することができます。 – skirtle

+0

あなたは同じ質問を二回尋ねたようですhttps://stackoverflow.com/questions/47486074/express-js-localhost-is-currently-unable-to-handle-this-request-http-error-500 – skirtle

答えて

1

でテンプレートエンジンを使用する方法についての情報を見つけることができますこの質問に関連する情報の一部は、他に含まれては、あなたが投稿しコピー:

Express.js: localhost is currently unable to handle this request. HTTP ERROR 500 (GET Request)

私は示唆していますここに投稿したコードを次のように変更してください:

router.get('/', checkLoggedIn, function(req, res) { 
    res.render('trips', { 
     user: req.user, 
     userType: 'Driver', 
     area: null, 
     points: null, 
     date: null, 
     time: null, 
     driverPref: null, 
    }); 
}); 

私はあなたとは思わない私はそれをすべて必要としますが、それがレンダリングされると整頓できます。

ここに2つの問題があると思われます。一つは、この行です:

<!--<title><%= user.firstName %>'s Trips - Erkab</title>--> 

「コメント」はuser.firstNameにアクセスしようとしているからEJSを阻止しないこと。コメントはEJSが関係する限り出力文字列の一部に過ぎず、特別なものとして扱われません。

これもあります:

<% if (userType != "Rider") { 

私はuserTypeが宣言されないように、そのも失敗するだろうと信じています。

+0

あなたのお手伝いをしてくれてありがとう@skirtle。これは実際にエラーを引き起こしたEJSファイルで使用されている、合格していない変数でした。私はページがnull値でうまく描画されるべきだと考えましたが、そうではありませんでした。 –

-1

あなたのエラーをキャッチするためにthis tutorialを使用してみてください:

また

In this example, the generic logErrors might write request and error information to stderr, for example:

function logErrors (err, req, res, next) { console.error(err.stack) next(err) } 

、あなたが使用することができますが、 try-catchステートメントhere

+1

申し訳ありませんが、私は本当に質問に答えるとは思わない –

+0

私は本当にエラー処理を探していません。私はエラーが発生した理由と解決方法を知ることに興味があります。 –

+0

私は、 'try-catch'を使ってどんな種類のエラーが発生しているのかを知ることができます。 – Azuloo

0

res.renderは口ひげ、ヒスイなどのようないくつかのテンプレートエンジンを使用して、静的テンプレートファイルをレンダリングするために使用されている。..

ですから、テンプレートエンジンを設定する静的なファイルを作成し、res.render(「旅行」)必要があります解釈テンプレートをレンダリングします。

あなたは急行here

+0

これは明らかです。私はすでにそれをしています。私の場合、** .ejs **ファイルをレンダリングするはずです。 –

+0

ビューはどのように構成されていますか?ディレクトリ構造は何ですか? – filippo

+0

彼らはすべて_viewsディレクトリにあります_ –

関連する問題