首页 > 解决方案 > 如何将数据从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

标签: node.jsmongodbexpress

解决方案


你应该在这里做一个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);


推荐阅读