body
body
ctx
对象的body
属性表示向客户端返回的数据,它可以是任何类型,vino
会根据body的数据类型进行响应。
示例
server.any("/test", (ctx) => {
//向客户端返回字符串hello
ctx.body = "hello";
});
支持的类型
1. 基本类型
当body为基本类型时,vino
会将其转换为字符串并添加Content-Type:text/plain; charset=utf-8
头
import {HttpServer} from "http"
let server = new HttpServer()
//页面输出空字符串
server.any("/null",(ctx)=>{
ctx.body=null
})
//页面输出: null
server.any("/null",(ctx)=>{
ctx.body=null
})
//页面输出: 12312
server.any("/bigint",(ctx)=>{
ctx.body=12312n
})
//页面输出: hello
server.any("/string",(ctx)=>{
ctx.body="hello"
})
//页面输出: true
server.any("/boolean",(ctx)=>{
ctx.body=true
})
//页面输出: 1234
server.any("/number",(ctx)=>{
ctx.body=1234
})
server.start()
2. Buffer
当body为Buffer
时,vino
会按照其存储的原始字节数据输出到http
响应体中。
提示
需要开发者指定Content-Type
的类型和字符编码,否则可能会出现乱码。
import {HttpServer} from "http"
let server = new HttpServer()
server.any("/buffer",(ctx)=>{
let buffer = new Buffer()
//页面输出: hello vino
//默认:Content-Type:text/plain; charset=utf-8
buffer.write("hello vino")
ctx.body=buffer
})
server.any("/buffer",(ctx)=>{
let buffer = new Buffer()
//页面输出: 你好,中国
//默认:Content-Type:text/plain; charset=utf-8
buffer.write("你好,中国")
ctx.body=buffer
})
server.any("/buffer-gbk",(ctx)=>{
let buffer = new Buffer()
//页面输出: 乱码内容,因为vino默认的编码都是utf8
buffer.write("你好,中国","gbk")
//开发者指定编码来解决乱码问题
//ctx.header.set("Content-Type","text/plain; charset=gbk")
ctx.body=buffer
})
server.start()
3. Reader
当body为实现了Reader
接口的输入流对象时,vino
会从输入流读取所有数据并输出到http
响应体中。
import {HttpServer} from "http"
let server = new HttpServer()
server.any("/reader",(ctx)=>{
//读取本地文件,因为file对象实现了Reader接口
let file = fs.openFile("./test.json")
//页面输出:{"name":"vino"}
//默认:Content-Type:text/plain; charset=utf-8
ctx.body= file
})
server.start()
test.json文件内容
{
"name":"vino"
}
4. 引用类型
当body为引用类型时,vino
会将其转换为json并添加Content-Type:application/json; charset=utf-8
头
import {HttpServer} from "http"
let server = new HttpServer()
server.any("/object",(ctx)=>{
//页面输出:{"code":0,"data":"vino"}
//默认:application/json; charset=utf-8
ctx.body= {code:0,data:"vino"}
})
server.any("/array",(ctx)=>{
//页面输出:["name","vino"]
//默认:application/json; charset=utf-8
ctx.body= ["name","vino"]
})
server.any("/map",(ctx)=>{
let map = new Map()
map.set("code",0)
map.set("data","vino")
//页面输出:{"code":0,"data":"vino"}
//默认:application/json; charset=utf-8
ctx.body= map
})
server.any("/set",(ctx)=>{
let set = new Set()
set.add("name")
set.add("vino")
//页面输出:["name","vino"]
//默认:application/json; charset=utf-8
ctx.body= set
})
server.start()