Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ladjs/koa-meta
SEO <title> and <meta name="description"> middleware for Koa and Lad
https://github.com/ladjs/koa-meta
children description dictionary koa lookup meta metadata node path recursive seo title
Last synced: 7 days ago
JSON representation
SEO <title> and <meta name="description"> middleware for Koa and Lad
- Host: GitHub
- URL: https://github.com/ladjs/koa-meta
- Owner: ladjs
- License: mit
- Created: 2017-09-09T19:28:28.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2023-06-09T01:22:39.000Z (over 1 year ago)
- Last Synced: 2024-11-01T16:40:13.340Z (14 days ago)
- Topics: children, description, dictionary, koa, lookup, meta, metadata, node, path, recursive, seo, title
- Language: JavaScript
- Homepage: https://lad.js.org
- Size: 682 KB
- Stars: 5
- Watchers: 6
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# koa-meta
[![build status](https://github.com/ladjs/koa-meta/actions/workflows/ci.yml/badge.svg)](https://github.com/ladjs/koa-meta/actions/workflows/ci.yml)
[![code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo)
[![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
[![made with lass](https://img.shields.io/badge/made_with-lass-95CC28.svg)](https://lass.js.org)
[![license](https://img.shields.io/github/license/ladjs/koa-meta.svg)]()> Meta `` and `` middleware for Koa and Lad
## Table of Contents
* [Install](#install)
* [Usage](#usage)
* [Translation Support](#translation-support)
* [Child Path Support](#child-path-support)
* [Error Catching](#error-catching)
* [Contributors](#contributors)
* [License](#license)## Install
[npm][]:
```sh
npm install koa-meta
```## Usage
> Use middleware:
```js
const path = require('path');const views = require('@ladjs/koa-views');
const Meta = require('koa-meta');/// ...
// set template rendering engine (see @ladjs/web for inspiration)
app.use(views(path.join(__dirname, 'views')));const meta = new Meta({
'/': [ 'Home', 'Our home page description' ],
'/contact', [ 'Contact', 'Contact us with questions' ]
});// note: you can also pass a second argument of a custom `logger`
// the default logger is `console` and must have a `.error` method
// `const meta = new Meta({}, console);`app.use(meta.middleware);
app.use((ctx, next) => {
// since the previous middleware was defined before this
// the `ctx.state` object has been populated with metadata
// when the render call occurs (it will not override any existing set values)
// for a request with `ctx.path` of `/` it will output:
// { title: 'Home', description: 'Our home page description' }
ctx.render('home');
});
```Therefore in your views you can render the meta data easily:
```pug
doctype html
html
head
title= meta.title
meta(name="description", content=meta.description)
```> Programmatically get a meta object/translated version of `title` and `description`:
```js
const Meta = require('koa-meta');const meta = new Meta({
'/': [ 'Home', 'Our home page description' ],
'/posts': [ 'Posts', 'Posts by our team' ]
});console.log(meta.getByPath('/posts/123456'));
// `{ title: 'Posts', description: 'Posts by our team' }`
```## Translation Support
This package supports translation out of the box.
It checks for a function set on `ctx.request.t` and utilizes that function to translate based off the request's locale.
## Child Path Support
This package supports parent meta data lookup for children of paths.
This means if you define in your configuration a path of `/posts` and a request is made to `/posts/123456` (with this path not being defined in your configuration), then it will use `/posts` definition for `/posts/123456`.
## Error Catching
By default this package will throw an error if a child path was found that does not have a parent defined.
This is extremely useful for retaining quality control with your configuration.
However this is configurable based off the third argument passed to `new Meta()`, e.g. `new Meta(config, logger, levelForMissing`.
The value of `levelForMissing` defaults to `error` for when `process.env.NODE_ENV` is equal to `development`, otherwise it defaults to `debug`.
This is configurable, therefore you can simply pass `new Meta(config, logger, 'warn')` if you want `warn` to be the log level for missing meta configurations.
## Contributors
| Name | Website |
| -------------- | -------------------------- |
| **Nick Baugh** | |## License
[MIT](LICENSE) © [Nick Baugh](http://niftylettuce.com/)
##
[npm]: https://www.npmjs.com/