Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jean-smaug/koa-twig
https://github.com/jean-smaug/koa-twig
hacktoberfest koa twig
Last synced: 25 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/jean-smaug/koa-twig
- Owner: jean-smaug
- Created: 2020-10-04T13:01:33.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2024-03-30T02:50:23.000Z (9 months ago)
- Last Synced: 2024-11-09T05:48:08.989Z (about 1 month ago)
- Topics: hacktoberfest, koa, twig
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/koa-twig
- Size: 49.8 KB
- Stars: 0
- Watchers: 1
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-koa - koa-twig - use twig as template engine (Middleware)
README
# koa-twig
The usual way yo use a template engine with Koa is by using `koa-views`.
I had an issue using it with Twig. I couldn't include or extend templates as described in [this issue](https://github.com/queckezz/koa-views/issues/99).
So I created this little lib.## Installation
```bash
yarn add -E koa-twig# OR
npm i --exact koa-twig
```## Config
- `views` string|required : the views folder path
- `extension` string : the files extension you want to use, by default, it's `twig`
- `errors` object|boolean : this optinal parameter allows you to customize the error handling. By default you can create `404.twig`, `500.twig`, every `STATUS_CODE.twig`. You can disable this behaviour by passing `false` to this option.
- `data` object : data you want to share accross all views
- `functions` object : functions you want to use accross all views
- `filters` object : filters you want to use accross all views## Example
Under the hood, this module is using the [twig](https://github.com/twigjs/twig.js) module. You can find an example inside the `demo` folder of the repo.
```js
const Koa = require("koa");
const koaTwig = require("koa-twig");const app = new Koa();
app.use(
koaTwig({
views: `${__dirname}/views`,
extension: "html",
errors: { 404: "not-found" }, // A 404 status code will render the file named `not-found`
data: { NODE_ENV: process.env.NODE_ENV }, // Data shared accross all views
})
);app.use(async (ctx) => {
switch (ctx.path) {
case "/":
await ctx.render("home");
break;case "/profile":
await ctx.render("profile", {
user: { firstName: "jean", lastName: "smaug" },
});
break;
}
});app.listen(8080);
```## Errors informations
If you define a `500.twig` (or any other STATUS_CODE.twig file) you'll be able to get error informations : `name`, `message`, `stack`.
```js
app.use(async (ctx) => {
throw new Error("Smaug");
});
``````html
...
{{ error.name }}
{{ error.message }}
{{ error.stack }}
```