Error response middleware for koa supporting:
- text
- json
- html
# npm
$ npm install koa-error
# yarn
$ yarn add koa-errortemplatepath to template written with your template engine, default:./error.htmlenginetemplate engine name passed to consolidate, default:lodashcachecached compiled functions, default:NODE_ENV != 'development'envforce a NODE_ENV, default:developmentacceptsmimetypes passed to ctx.accepts, default:[ 'html', 'text', 'json' ]
By using the template option you can override the bland default template,
with the following available local variables:
envctxrequestresponseerrorstackstatuscode
Here are some examples:
app.use(error({engine: "pug",template: __dirname+"/error.pug",}));doctype html
html
head
title='Error - '+ status
body
#error
h1 Error
p Looks like something broke!
if env =='development'
h2 Message:
pre: code= error
h2 Stack:
pre: code= stackapp.use(error({engine: "nunjucks",template: __dirname+"/error.njk",}));<!DOCTYPE html><html><head><title>Error - {{status}}</title></head><body><divid="error"><h1>Error</h1><p>Looks like something broke!</p>
{% if env == 'development' %}
<h2>Message:</h2><pre><code>
{{error}}
</code></pre><h2>Stack:</h2><pre><code>
{{stack}}
</code></pre>
{% endif %}
</div></body></html>koa-error engine tool base on consolidate, you can also set consolidate options
more-nunjucks-options >
app.js:
//...constapp=newKoa();constnunjucks=require("nunjucks");constnunjucksEnv=newnunjucks.Environment(newnunjucks.FileSystemLoader(path.join(__dirname,"tpl")));// add filtersconstfilters=require("./filters");for(let[k,v]ofObject.entries(filters)){nunjucksEnv.addFilter(k,v);}//...app.use(koaError({//...template: path.join(__dirname,"tpl/error.html"),options: {
nunjucksEnv,// custom nunjucks env},}));filters.js:
module.exports={// define filters function herestringify(..args){returnJSON.stringify(...args);}//...};tpl/error.html:
<!DOCTYPE html><html><head>
{% include "./com.html" %}
</head><body><p>{{ request | stringify }}</p> {# use filters here #}
<!-- ... --></body></htm>tpl/com.html:
<linkrel="stylesheet" href="/css/normalize.css" />