node.js - 将带有节点的请求发布到 MongoDB 并呈现成功页面?
问题描述
这是我的 HTML 表单:
<form id="task-form" action="/mytask" method="POST">
<input type="text" name="name" placeholder="name of task" />
<input type="text" name="description" placeholder="description" />
<input type="submit" />
</form>
我想将数据存储到与以下代码配合使用的 MongoDB 中。不幸的是,单击按钮后我当然可以看到我不想要的 JSON。
app.post("/mytask", urlencodedParser, (req, res) => {
const task = new Task(req.body);
task
.save()
.then(() => {
res.send(task);
})
.catch(e => {
res.status(400).send(e);
});
});
我还想呈现一个感谢页面,其中包含来自request.body
. 这也很好。
app.post("/mytask", urlencodedParser, (req, res) => {
res.render("thankyou", {
name: req.body.name,
description: req.body.description
});
});
但我想两者都做。存储数据并呈现另一个页面,类似这样。
app.post("/mytask", urlencodedParser, (req, res) => {
const task = new Task(req.body);
task
.save()
.then(() => {
res.send(task);
})
.catch(e => {
res.status(400).send(e);
});
res.render("thankyou", {
name: req.body.name,
description: req.body.description
});
});
这似乎是不可能的。错误如下:
[ERR_HTTP_HEADERS_SENT]:C:\Users\User\Desktop\MyExpressApp\views\thankyou.hbs:发送到客户端后无法设置标题
我该如何解决这个问题?
解决方案
提及您正在使用的前端会更有帮助。从外观上看,您只是在渲染 JSON 的任务对象。这就是为什么您在第一个代码中单击提交后会看到 json。
错误发生在最后一个代码中,因为您正在发送感谢消息,但在保存操作完成后,您正尝试使用任务对象发送另一个响应。您只能为请求发送一个响应。
可能的方法是使用任何渲染引擎渲染一个新的 html,或者使用 angular 等前端框架,响应接收消息并显示它。
例如,如果您使用 ejs,代码将类似于
app.post("/mytask", urlencodedParser, (req, res) => {
const task = new Task(req.body);
task
.save()
.then(() => {
res.render("index", {
name: task.name,
description: task.description
});
})
.catch(e => {
res.status(400).send(e);
});
});
index.ejs 文件
<html>
<head><title><%= title %></title></head>
<body>
<p>Thank you</p>
<p> <%= name %> </p>
<p> <%= description%> </p>
</body>
</html>
推荐阅读
- r - R循环并使用变量
- postgresql - Postgres 备份为 tar.gz
- mule - 导航到原始有效负载上数据编织中 diff 函数返回的路径
- php - 将 WooCommerce 商店分页移动到商店循环下方
- python - AWS API Gateway - 集成响应正文映射不起作用
- python - 如何使用 sklearn.metrics.make_scorer 创建调整后的 R 平方记分器?
- android - 引入动态功能模块后,发布版本的 Android 清单合并失败
- java - Java 11 中的 CLI 命令:运行类与运行模块
- spring-kafka - 在 Spring Kafka 中,如果我只是使用生产者,是否需要将 @EnableKafka 注释添加到我的应用程序中?
- c++ - 线程 join() 引用类成员