Tri*_*tch 7 javascript http fetch node.js express
我在javascript中尝试获取API。当我尝试通过获取将某些内容发布到服务器时,请求正文为空数组。但是,当我使用Postman时,它可以工作...这是我在NodeJS中的服务器代码:
const express = require('express')
const app = express()
const port = 3000
app.use(express.json())
app.post('/api', function (req, res) {
console.log(req.body)
})
app.listen(port)
Run Code Online (Sandbox Code Playgroud)
这是我的客户:
fetch('http://"theserverip":3000/api', {
method: 'POST',
headers: { "Content-Type": "application/json" },
mode: 'no-cors',
body: JSON.stringify({
name: 'dean',
login: 'dean',
})
})
.then((res) => {
console.log(res)
})
Run Code Online (Sandbox Code Playgroud)
问题是在服务器端,req.body为空。有人能帮我吗?谢谢 !
Phi*_*hil 14
问题是
mode: 'no-cors'
Run Code Online (Sandbox Code Playgroud)
从文档中 ...
防止该方法成为HEAD,GET或POST之外的任何其他内容,并且阻止标头成为简单标头之外的任何其他内容
的简单内容类型报头限制允许
text/plain
,application/x-www-form-urlencoded
和multipart/form-data
这会导致您精心制作的Content-Type: application/json
标头成为content-type: text/plain
(至少在通过Chrome测试时)。
由于您的Express服务器需要JSON,因此它不会解析此请求。
我建议省略mode
配置。"cors"
而是使用默认选项。
由于您的请求并不简单,因此您可能需要向Express服务器中添加一些CORS中间件。
另一个(略有漏洞)选项是告诉Express将text/plain
请求解析为JSON。这使您可以将JSON字符串作为简单请求发送,这也可以避免进行预检OPTIONS
请求,从而降低总体网络流量...
app.use(express.json({
type: ['application/json', 'text/plain']
}))
Run Code Online (Sandbox Code Playgroud)
编辑:将结尾括号添加到app.use
最终代码块。
归档时间: |
|
查看次数: |
4748 次 |
最近记录: |