【发布时间】:2021-05-08 02:32:34
【问题描述】:
学习 Express.js。我有以下简单的 HTML 表单:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Calculator</title>
</head>
<body>
<h1>Calculator</h1>
<form action="/" method="post">
<input type="text" name="num1" placeholder = "First Number" value=""> <br>
<input type="text" name="num2" placeholder = "Second Number" value=""> <br>
<button type="submit" name="submit">Calculate</button>
</form>
</body>
</html>
用户应该输入两个数字,然后返回它们的总和。简单的 Express 服务器在这里。 body-parser 被 Express app 包含在 node_modules 和 used 中,以便操作 req 对象并提取表单数据。
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.urlencoded({extended:true}));
app.listen(3000, () => {
console.log("Server spun on port 3000.")
});
app.get("/", (req, res) => {
console.log("Serving a GET request at root route.");
res.sendFile(absoluteDirPath() + "index.html");
});
app.post("/", (req, res) => {
console.log("Serving a POST request at root route.");
let num1 = Number(req.body.num1);
let num2 = Number(req.body.num2);
if(isNaN(num1) || isNaN(num2)) {
res.send("<p>Need numerical values.</p>");
} else {
res.send("<h3>Result: " + (num1 + num2) + "</h3>");
}
// How can I re-direct the user here?
});
function absoluteDirPath() {
const path = require('path');
return __dirname + path.sep;
}
我有兴趣将用户重定向到POST 中间件中的index.html,这样他们就可以在不刷新 URL 的情况下再次使用计算器,无论他们是否成功使用它。由于这是在后端,我无权访问 window 对象,我无法直接使用它。不确定如何做到这一点。有什么想法吗?
【问题讨论】:
-
你必须做出决定。您想继续使用服务器进行所有操作,还是想使用 AJAX 调用 API 来处理您的帖子/响应。否则,您所做的事情会使 Post/Redirect/Get 设计模式无效,该模式允许重新加载、共享或添加表单提交后显示的页面而不会产生不良影响,例如再次提交表单。
标签: javascript node.js express post redirect