node.js - 如何将数据从html发送到mongodb
问题描述
我正在使用以下内容form
将数据发送到我的 mongodb 服务器。
<form action="/tasks" method="post">
<input type="text" name="test">
<button>Add Data</button>
</form>
POST
此表格通过以下方式连接到我的请求
const express = require('express');
const taskController = require("./controllers/TaskController");
require("./config/db");
const app = express();
const port = 3000;
const path = require('path');
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app
.route("/tasks")
.get(taskController.listAllTasks)
.post(taskController.createNewTask);
...
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, '../frontend/index.html'));
});
app.listen(port, () => {
console.log(`Listening at port ${port}`);
});
POST
请求由createNewTask
我的控制器中的函数处理
const Task = require("../models/Task");
...
// Create a new task and save it to database
exports.createNewTask = (req, res) => {
let test = res.json(req.body.test)
let newTask = new Task(test);
console.log(newTask)
newTask.save((err, task) => {
if (err) {
res.status(500).send(err);
}
res.status(201).json(task);
});
};
控制器获取以下 Schema
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const TaskSchema = new Schema({
taskName: {
type: String,
required: true
},
createdOn: {
type: Date,
default: Date.now
}
});
module.exports = mongoose.model("Tasks", TaskSchema);
看完教程后,我的直觉是form action="/tasks"
in与inindex.html
相关。app.route("tasks")
index.js
我的input name="test"
似乎也与res.json(req.body.test)
.
我之所以选择res.json
是因为我认为我必须JSON
从输入而不是字符串向服务器发送数据。
但是,在我从 提交{"taskName": "lol"}
输入后http://localhost:3000/
,我会收到http://localhost:3000/tasks
以下结果
"{\"taskName\": \"lol\"}"
有错误
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
如何正确地将我的 html 数据发送到服务器?
我的github
解决方案
你应该在这里做一个if / else
newTask.save((err, task) => {
if (err) {
res.status(500).send(err);
}
res.status(201).json(task);
});
对此
newTask.save((err, task) => {
if (err) {
res.status(500).send(err);
}else{
res.status(201).json(task);
}
});
如果出现错误,您的代码将首先发送错误 500,然后发送res.status(201).json(task);
推荐阅读
- java - Javafx 使用套接字传输数据
- angular - Angular 组件在被销毁后仍在监听订阅
- java - 为什么我的詹金斯在重启后抛出“没有找到这样的方法”异常?
- java - 存储在列表中的元素没有被点击,selenium java中的“点错误不可点击”
- javascript - 如何在javascript中打印带有首选项的html?
- react-native - 传递参数链接打不开
- android - 来自 queryIntentActivityOptions 的 ResolveInfo 项目的优先级始终为 0
- python - 如何使用python将推文中的短词替换为完整词
- php - Symfony4 使用路由注释扩展控制器
- bash - 使用 sed 将反斜杠替换为斜杠