我正在构建这个学校项目,我们必须在 NodeJs 和自由选择的前端中创建自己的 API。我写了以下代码:[在公共地图] app.jsfunction 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.jsconst 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}`))
2 回答

LEATH
TA贡献1936条经验 获得超6个赞
你使用 headers = 这是无效的。尝试标头:{}。当你得到空对象时,尝试记录请求。也有可能正文作为字符串发送,express.json() 中间件无法解析数据。结果,您得到空对象。
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)
}

神不在的星期二
TA贡献1963条经验 获得超6个赞
如果您在一段时间后尝试访问邮递员,它也可能在发送正文时引起问题。在我的例子中,我已经完成了 API 中的所有更改,添加了路由器,删除了验证等,但最后罪魁祸首是邮递员,因为无论我发送什么数据,它都将 request.body 显示为 {}(空)。在我重新安装邮递员后它工作了!我只是觉得更快乐,我花了3-4个小时所以你也可以考虑这个选项。
添加回答
举报
0/150
提交
取消