推荐答案
在 Koa 中,可以通过 ctx.body 来设置响应体。ctx.body 可以接受多种类型的值,包括字符串、Buffer、对象、流等。Koa 会自动根据 ctx.body 的类型来设置合适的 Content-Type 响应头。
// www.javascriptcn.com code example
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx) => {
// 设置响应体为字符串
ctx.body = 'Hello, Koa!';
// 设置响应体为 JSON 对象
// ctx.body = { message: 'Hello, Koa!' };
// 设置响应体为 Buffer
// ctx.body = Buffer.from('Hello, Koa!');
// 设置响应体为流
// ctx.body = fs.createReadStream('file.txt');
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});本题详细解读
1. ctx.body 的作用
ctx.body 是 Koa 中用于设置响应体的属性。它的值可以是字符串、Buffer、对象、流等类型。Koa 会根据 ctx.body 的类型自动设置合适的 Content-Type 响应头。
2. 不同类型的响应体
字符串:当
ctx.body设置为字符串时,Koa 会自动将Content-Type设置为text/plain或text/html(取决于字符串内容)。JSON 对象:当
ctx.body设置为对象时,Koa 会自动将对象序列化为 JSON 字符串,并将Content-Type设置为application/json。Buffer:当
ctx.body设置为 Buffer 时,Koa 会将 Buffer 直接作为响应体发送,并设置Content-Type为application/octet-stream。流:当
ctx.body设置为流时,Koa 会将流的内容作为响应体发送,并自动处理流的读取和关闭。
3. 注意事项
- 如果
ctx.body没有被设置,Koa 会返回一个空的响应体,状态码为404。 - 如果
ctx.body被设置为null或undefined,Koa 会返回一个空的响应体,状态码为204(No Content)。 - 如果
ctx.body被设置为一个函数,Koa 会将其视为中间件并调用它。
4. 示例代码
// www.javascriptcn.com code example
const Koa = require('koa');
const fs = require('fs');
const app = new Koa();
app.use(async (ctx) => {
if (ctx.path === '/string') {
ctx.body = 'This is a string response';
} else if (ctx.path === '/json') {
ctx.body = { message: 'This is a JSON response' };
} else if (ctx.path === '/buffer') {
ctx.body = Buffer.from('This is a Buffer response');
} else if (ctx.path === '/stream') {
ctx.body = fs.createReadStream('file.txt');
} else {
ctx.status = 404;
ctx.body = 'Not Found';
}
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});在这个示例中,根据不同的路径,Koa 会返回不同类型的响应体。