Fastify 按标题获取项目总是返回原始 JSON 为 null
Fastify get item by title always returning raw JSON as null
我刚刚开始使用 Fastify,运行 遇到了一个问题,我开始创建一个 get 请求以按标题获取项目,但它一直给我一个 null
的响应我尝试记录 request.body
.
我的获取请求:
// Get points by title
fastify.route({
method: 'GET',
url: '/pointz/title',
handler: (request, reply) => {
return request.body
}
})
我在邮递员中的获取请求(如代码):
curl --location --request GET 'http://localhost:3000/pointz/title' \
--header 'Content-Type: application/json' \
--data-raw '{
"title": "test"
}'
Screenshot of my input and output in Postman
预期结果是请求 return 是一个 body,其中包含正在发送的 JSON,因此我可以更改代码以访问 request.body.title
test
.
的 return 值
更新:
现在找到了解决方法。如果我将 GET 请求更改为 POST 请求,它会像预期的那样工作。但是我怀疑这是否被认为是好的做法。
如本 GitHub 期所讨论 GET request validated scheme body?
body
不应在 GET 请求中发送,a datailed answer about it
并且 fastify 默认忽略它。
但是遗留代码可以,如果您需要支持它,则必须使用原始请求:
const fastify = require('fastify')({ logger: true })
fastify.get('/', async (req) => {
let body = ''
for await (const data of req.raw) {
body += data.toString()
}
return body
})
fastify.listen(3000)
然后您的 curl
命令将按预期工作。
const got = require('got')
got.get('http://localhost:3000/', {
json: { hello: 'world' },
allowGetBody: true
}).then(res => {
console.log('Returned = ' + res.body)
})
我刚刚开始使用 Fastify,运行 遇到了一个问题,我开始创建一个 get 请求以按标题获取项目,但它一直给我一个 null
的响应我尝试记录 request.body
.
我的获取请求:
// Get points by title
fastify.route({
method: 'GET',
url: '/pointz/title',
handler: (request, reply) => {
return request.body
}
})
我在邮递员中的获取请求(如代码):
curl --location --request GET 'http://localhost:3000/pointz/title' \
--header 'Content-Type: application/json' \
--data-raw '{
"title": "test"
}'
Screenshot of my input and output in Postman
预期结果是请求 return 是一个 body,其中包含正在发送的 JSON,因此我可以更改代码以访问 request.body.title
test
.
更新: 现在找到了解决方法。如果我将 GET 请求更改为 POST 请求,它会像预期的那样工作。但是我怀疑这是否被认为是好的做法。
如本 GitHub 期所讨论 GET request validated scheme body?
body
不应在 GET 请求中发送,a datailed answer about it
并且 fastify 默认忽略它。
但是遗留代码可以,如果您需要支持它,则必须使用原始请求:
const fastify = require('fastify')({ logger: true })
fastify.get('/', async (req) => {
let body = ''
for await (const data of req.raw) {
body += data.toString()
}
return body
})
fastify.listen(3000)
然后您的 curl
命令将按预期工作。
const got = require('got')
got.get('http://localhost:3000/', {
json: { hello: 'world' },
allowGetBody: true
}).then(res => {
console.log('Returned = ' + res.body)
})