我有一个包含路径 / request 的页面,其中包含一个表单。表单方法是POST,操作是 / request 。在 request.js 中的POST处理程序中应该发生的事情是对表单数据执行某些操作(存储在DB等中),然后使用路径 / trips <重定向到其他页面/ em>的
每当我使用res.send时,GET处理程序都能正常工作(&#34;这里的一些文字&#34;);但是当我尝试使用res.render(&#39; trip&#39;)渲染页面时,会给我一个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!");
});
所以上面的部分工作并打印&#34;这是行程路线GET响应!&#34; 当我访问localhost:8000 / trip(来自导航栏或提交表格)
router.get('/', checkLoggedIn, function(req, res) {
res.render('trips');
});
但是,当我写这篇文章时,它会给我一个 HTTP ERROR 500 localhost当前无法处理此请求。
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>
答案 0 :(得分: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,
});
});
我认为你并不需要所有这些,但是一旦它呈现你就可以收拾整齐。
我怀疑这里有两个真正的问题。一个是这一行:
<!--<title><%= user.firstName %>'s Trips - Erkab</title>-->
那个评论&#39;不会阻止EJS尝试访问user.firstName
。就EJS而言,评论只是输出字符串的一部分,并且不会被视为特殊的。
还有:
<% if (userType != "Rider") {
我相信,由于userType
未被宣布,这也将失败。
答案 1 :(得分:0)
res.render
用于使用一些模板引擎(如胡子,玉石等)呈现静态模板文件。
因此,您应该配置模板引擎,创建一个静态文件,然后res.render('trips')解释并呈现模板。
您可以在快速here
中找到有关如何使用模板引擎的信息答案 2 :(得分:-1)
尝试使用this tutorial来捕捉错误:
在此示例中,通用logErrors可能会将请求和错误信息写入stderr,例如:
function logErrors (err, req, res, next) { console.error(err.stack) next(err) }
或者,您可以使用try-catch
语句。 here