如何在Deno中读取POST请求request对象内的请求数据
Deno读取POST请求体的方法
你代码中的req为Deno标准库http模块的ServerRequest实例,POST请求的请求体需要通过该实例提供的异步方法读取,另外你示例代码中的method变量未定义,需改为读取req.method属性判断请求方法。
常用读取方式
根据你请求体的格式,选择对应的方法即可,所有方法均为异步,需要配合await使用:
- 读取JSON格式请求体:调用
req.json(),直接返回解析后的JS对象 - 读取纯文本/字符串格式请求体:调用
req.text() - 读取表单提交数据(包括普通表单和带文件的multipart表单):调用
req.formData(),返回FormData对象,可通过get()方法读取对应字段 - 读取二进制原始数据:调用
req.arrayBuffer(),或直接消费req.body可读流
修正后的示例代码
// 从Deno标准库http模块导入serve方法 import { serve } from "std/http/server.ts"; const s = serve({ port: 8000 }); for await (const req of s) { if(req.url === '/update' && req.method === 'POST') { // 示例:读取JSON格式的POST数据 try { const postData = await req.json(); console.log("获取到的POST请求数据:", postData); req.respond({ body: "数据接收完成" }); } catch (e) { req.respond({ status: 400, body: "请求体格式错误" }); } } else { req.respond({ status: 404, body: "路径不存在" }); } }
注意事项
- 请求体是只读流,消费后无法重复读取,上述读取方法只能调用一次
- 若你使用的是旧版本Deno的http服务API,可通过以下兼容方式读取原始请求体:
const bodyUint8 = await Deno.readAll(req.body); const postText = new TextDecoder().decode(bodyUint8);
内容的提问来源于stack exchange,提问作者user16151202
相关产品推荐
相关产品推荐

