当前位置: 首页 > 知识库问答 >
问题:

POST请求不工作-发送空对象[NodeJS]

尹钱青
2023-03-14

我正在构建这个学校项目,我们必须在NodeJs和自由选择前端中创建自己的API。我写了以下代码:[在公共地图]app.js

function getAll() {
    console.log("Get all")
    makeRequest("/poems", "GET")
} 

async function getRandomPoem() {
    const ids = [1, 2, 3, 4, 5, 6, 7]
    const randomId = ids[Math.floor(Math.random() * ids.length)]
    const arrayofPoems = await fetch("/poems/" + randomId, {method: "GET"})
    const data = await arrayofPoems.json()

    const titleBox = document.getElementById("title")
    const authorBox  = document.getElementById("author")
    const textBox = document.getElementById("text")

    titleBox.innerText = data.title
    authorBox.innerText = data.author
    textBox.innerText = data.text
}

function addPoem() {
    event.preventDefault();
    let title = document.getElementById("titleInput").value
    let author = document.getElementById("authorInput").value
    let text = document.getElementById("textInput").value

    let newPoem = [{
        id: 8,
        title: "Aaa",
        author: "Ccc",
        text: "Ddd"
    }]
    makeRequest("/poems/", "post", newPoem)
}


async function makeRequest(url, reqMethod, body) {
    
    const response = await fetch(url, {
      //  headers = { "Content-Type": "application/json" },
        method: reqMethod,
        body:JSON.stringify(body)
    })
    console.log(response)
    const data = await response.json()
    console.log(data)
}

[这里是对本地服务器的请求]server.js

const express = require('express');
const { poems } = require('./Poems/poemsArray');
const app = express();
const port = 8080;
const allPoems = require('./Poems/poemsArray')

app.use(express.json())
app.use("/", express.static('public'))


app.listen(port, console.log(`App listening on port ${port}`)) 


//  ----------------   POEMS RESOURCE, All endpoints ------------------ //

// Get all
app.get('/poems', (req, res, next) => {
   res.json(allPoems)
})

// Get specific
app.get('/poems/:id', (req, res, next) => {
   const id = req.params.id
   const onePoem = allPoems.find((poem) => poem.id == id)

   if(onePoem) {
       res.json(onePoem)
   } else {
       res.status(404).json({ status: "Poem not found! "})
   }
})

// Post a poem
app.post('/poems', (req, res, next) => {
   allPoems.push(req.body)
   res.json({ status: "A new poem has been posted!"})
})

[最后是带有输入字段的HTML,其中的值应与POST req]index.HTML一起发送

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Poems from outer space</title>
    <script src="app.js"></script>
</head>

<body>
    <div id="container">

        <div id="poem-container">
            <h1 style="color:red;text-align:center;">Poems</h1>
            <p style="text-align: center;">Generate a random poem about space!
                <button onclick="getRandomPoem()">Generate my poem!</button>
            </p>

        <div id="showPoem">
            <h1 id="title"><!-- Title of poem injected --></h1>
            <h2 id="author"><!-- Author of poem injected --></h2>
            <p id="text"><!-- Text of poem injected --></p>
        </div>

        <div id="image-container">
            <!-- INJECTED BY EXTERNAL NASA API -->
            <!-- EXAMPLE IMAGE TO TEST DELETE WHEN API WORKS -->
            <img src="img/apod.jpg" alt="Test Image" width="600px" id="img">
        </div>



    </div>
     
    <div id="form-container">
        <form method="post" action="/poems">
            
                <h1>Send us your poem!</h1>
                <label>Your title:</label> <br>
                <input type="text" requirede name="title" id="titleInput"> <br> 
                <label>Your name:</label> <br> 
                <input type="text" required name="author" id="authorInput"> <br> <br>
                <label>Your poem:</label> <br>
                <input type="text" required name="text" id="textInput" style="width:500px;height:500px">
                <br>
            
                <button type="submit" onclick="addPoem()">Send</button>
        
        </form>
    </div>




    </div>

    
</body>
</html>

在函数addPoe()中,让newPoe用于测试目的。标题、作者和文本应来自表格。谁能看出我做错了什么?

编辑:在makeRequest函数中,头被注释掉了,这是因为如果我把它留在代码中,突然间所有请求都不能工作了?

感谢大家!

共有1个答案

盖泽宇
2023-03-14

您使用的headers=是无效的。尝试标头:{}。当您得到空对象时,尝试记录请求。也有可能将正文作为字符串发送,express.json()中间件无法解析数据。结果,您得到的是空对象。

null

async function makeRequest(url, reqMethod, body) {
    
    const response = await fetch(url, {
        headers : { "Content-Type": "application/json" },
        method: reqMethod,
        body:JSON.stringify(body)
    })
    console.log(response)
    const data = await response.json()
    console.log(data)
}
 类似资料:
  • 我正在使用RestTemboard使用Web服务,我的POST请求如下。 我试着打印我的requestBodyJsonObject并将其放入rest客户机,它工作正常,所以请求主体没有问题。但在这里,我并没有得到预期的结果,只是在没有rest客户端的请求主体的情况下发送post请求时得到了结果。 所以我在这里一无所知。非常感谢您的帮助。

  • 代码如下: 这将向flask发送一个{“name”:“go”}JSON字典。Flask应该将语言名称追加到数组中,并在响应中返回完整的数组。现在,当我手动发送请求时,这就工作了,所以这不是Flask的错误。但是当我从iOS发送上述内容时,我在flask控制台中得到request.json==None。很明显,我送的是一具空尸体,但我不应该。你知道我哪里出了问题吗?

  • 请求方式: "|3|2|url,content|\r" 参数: url 设置Post请求的url链接 content post请求的数据 返回值: "|3|code|data|\r" 参数: code http请求返回的成功或者错误码 成功:code = 200 获取数据失败:code = -1 http请求字段错误:code = 1 data http请求返回的数据 Arduino样例: sof

  • 我正在这样做: 但是请求在服务器上不起作用。。。在服务器上,我应该看到发送的数据,但我看不到它们 我也试过这个: 而且它是有效的。。。有什么问题吗?

  • 用简单的话来说,我想发送这个数据到服务器,使用Volley Post Request。 它有一个整数和一个字符串,我得到的响应是Jsonarray 我尝试过以下方法,但都不管用 > 因为它是json数组请求,我不能在参数中发送数据,因为第三个参数只需要JsonArray,我必须发送JsonObject,所以保持为null 我不能把它放在中,因为值的1是整数,并且它只接受字符串 getparams(

  • 但当我运行它时,它会给我这个错误: E/AndroidRuntime:致命异常:主进程:com.example.webTestConnection,PID:23550 Android.os.networkonMaintHreadexception,Android.os.strictmode$AndroidBlockGuardPolicy.onNetwork(strictmode.java:1166