使用fetch()将数据发布到NodeJS

坦科姆

我一直在尝试根据此NodeJs Youtube教程学习NodeJS

我已经与Fetch API一起工作了几个月,以从WordPress和Google Sheets后端获取数据。

Youtube播放列表的最后一段视频是关于使用NodeJS和npm的express,EJS和body-parser创建待办事项应用程序的。

但是,在“待办事项列表”应用程序的第4部分中,该“老师”正在使用带有Ajax的jQuery将数据发布到NodeJS(他的jQuery代码段)。由于我仅使用fetch()来处理AJAX POST请求,因此我想在纯JavaScript中继续使用此方法。

我的ejs文件名为todo.ejs,用于存储页面的HTML模板,如下所示:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link rel="stylesheet" href="/assets/style.css">
    <!-- Works because of express middleware.
    Since we stored the public folder as a static folder,
    we can request anything within that folder from the url, such as
    127.0.0.1:3000/assets/styles.css
    -->

    <title>Todo List</title>
</head>

<body>
   <h1>My Todo List</h1>
    <div id="todo-table">
        <form>
            <input type="text" name="item" placeholder="Add new item..." required>
            <button type="submit">Add Item</button>
        </form>
        <ul>
            <% todos.forEach(todoList =>{ %>
             <li> <%= todoList.item %> </li>   
           <% }) %>
        </ul>
    </div>
</body>
<script src="/assets/script.js"></script>

</html>

我的script.js(链接到todo.ejs页面)如下所示:

document.addEventListener("DOMContentLoaded", function (event) {
    let submitButton = document.querySelector("button");
    let textField = document.querySelector("input");

    submitButton.addEventListener("click", addItem);

    function addItem() {

        let newItem = textField.value;
        let todo = {
            item: newItem
        };

        fetch("/todo", {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(todo)
            }).then((res) => res.json())
            .then((data) => console.log(data))
            .catch((err) => console.log(err))
    }

});

我的控制器处理所有的获取/发布请求,称为todoController.js,如下所示:

let bodyParser = require("body-parser");
let urlencodedParser = bodyParser.urlencoded({ extended: false });

// Have some items already in place
let data = [{item: "Get milk"} , {item: "Walk dog"} , {item: "Clean kitchen"}];

module.exports = function (app) {

    //Handle get data requests
    app.get("/todo", function (req, res) {
        res.render("todo", {todos: data});
    });

    //Handle post data requests (add data)
    app.post("/todo", urlencodedParser, function (req, res) {
        console.log(req.body);
    });

    //Handle delete data requests
    app.delete("/todo", function (req, res) {

    });
};

现在,每次我用一些文本填充输入字段并按下回车按钮时,我的终端就会输出空对象:

CMD输出已过帐的数据

基于这些空对象,一定有问题,我的POST请求未正确接受/发送。

我的文件树如下所示: 整个项目的文件树

是否有人对此有答案(可能是显而易见的答案)?(我知道我可以抓住他的jQuery Ajax代码片段来使它起作用,但是我很想尝试使用纯Javascript来理解它)

在此先感谢大家抽出宝贵时间来帮助我:)

FINDarkside

您需要使用bodyParser.json而不是bodyParser.urlencoded。

顾名思义,urlencoded将解析url参数,而bodyParser.json将解析请求正文中的json。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用React.js中的Fetch API将数据发布到数据库

如何使用fetch()javascript方法将数据发布到.NET Core Web API

尝试使用Request NPM将数据从NodeJS发布到本地主机(Loopback Swagger API)

如何使用express / nodejs将下拉表单数据发布到MongoDB?

使用带有 Express 的 nodejs 将表单数据发布到 MySQL

使用Python将数据发布到Firebase

从 Wordpress 表单将数据发布到 NodeJS 服务器

无法将数据从表单发布到nodeJS服务器

将数据发布到JsonP

将数据发布到php

将数据从reactjs发布到nodejs后如何从nodejs获得响应?

使用mutipart发布将发布数据发布到服务器

使用Guzzle将数据发布到EventBrite API

使用Python将文件和数据发布到API

如何使用Postman将XML数据发布到Web服务?

如何使用Unirest将数据从Vaadin发布到Vertx?

使用jQuery将数据发布到MVC操作方法

如何使用cURL将数据发布到iframe?

使用 $http 将数据从 angularJS 发布到 Express

使用python请求库将数据发布到搜索框

将JSON发布到API并使用PHP检索数据

使用 MVP Android 将数据发布到服务器

将数据发布到PHP并使用SwiftyJSON获取JSON

如何使用PHP将数据发布到Firebase?

使用jQuery将数据从HTML发布到烧瓶视图

如何使用HttpClient将JSON数据发布到Web API

使用javascript提取将数据发布到Django Rest框架

无法使用Ajax将数据发布到Django函数

无法使用 React 将数据发布到 Express