BUPT-HJM / vue-blog

A single-user blog built with vue2, koa2 and mongodb which supports Server-Side Rendering
https://imhjm.com
MIT License
598 stars 127 forks source link

请教一个关于 koa-onerror 的问题 #6

Closed fengyun2 closed 7 years ago

fengyun2 commented 7 years ago

version: "koa": "^2.3.0", "koa-onerror": "^3.1.0"

import onerror from "koa-onerror";
const app = new Koa();
onerror(app);

ctx.throw(500, '服务器错误')

为何 onerror(app), 拦截 ctx.throw 抛出的错误,会返回一个 html 格式的错误文档,而不是一个json格式的错误?(即如何拦截返回一个如下格式的error: ctx.body = {status: 500, message: '服务器错误'})

BUPT-HJM commented 7 years ago

返回一个html格式的错误文档是因为你req请求头带的Accept跟html最匹配,所以onerror判断使用html错误处理 关键代码位置:https://github.com/koajs/onerror/blob/master/index.js#L75

其实它默认带有三种error handler,分别是text、json、html 你要自定义返回内容,你可以通过传入配置重写handler

fengyun2 commented 7 years ago

@BUPT-HJM 我是用postman模拟请求的,如何在koa中设置为json返回呢?

BUPT-HJM commented 7 years ago

不好意思,最近比较忙没有及时回复

其实我前面写了就是由headers的Accepts判断的 既然是postman,可以设置请求头,可以设置为 Accept:application/json, text/plain, */* 这样请求到就是json,如果想自定义传入koa-onerror配置就行了