Docs-server
![node](https://img.shields.io/node/v/docs-server.svg)
A server which is used to build a kind of microservices for docs system.
Feature
-
Perform automatic markdown searching and generate correct dynamic routes according to the root path of your project.
-
Support multiple-level documentation routes.
-
Support for specifying additional static resources routes.
-
Support for customizing all docs routes
-
Support for customizing docs response headers
-
Support for specifying minimum response size in bytes to turn on gzip
Installing
yarn add docs-server
npm i docs-server
Usage
const DocsServer = require('docs-server')
const app = new DocsServer()
- ( Optional ) You can specify your custom configuration.
const resolve = require('path').resolve
const DocsServer = require('docs-server')
const app = new DocsServer({
cwd: resolve(__dirname, './'),
dest: resolve(__dirname, './menu.json'),
port: '8800',
headers: {
'Access-Control-Allow-Origin': '*',
'vary': 'origin',
'Access-Control-Allow-Methods': 'GET,POST'
},
threshold: 1
extra: [
{
route: '/test',
middleware: async (ctx, next) => {
}
}
],
filter: (origin) => {
const removeShortDate = origin.replace(/\/{0}(\d{6}-)+/g, '')
const removeInitialYear = removeShortDate.replace(/^\d{4}/, '')
const removeRepeat = removeInitialYear.replace(/^\/\S+\//, '')
const removeExtension = removeRepeat.replace(/\.md$/, '')
return `writings/${removeExtension}`
},
headerMiddleware: async function (ctx, next) {
const isInWhitelist = ctx.origin === 'https://github.com'
|| ctx.origin === 'http://example.com'
if (isWhitelist) {
ctx.set({
'Access-Control-Allow-Origin': `${ctx.origin}`
})
}
await next()
}
})
-
Notice:
-
All options is optional
-
Default filter will just remove docs file extension name
-
Custom filter MUST return a string type value, and it will be used to only generate docs routes (excluding extra routes
and menu.json
)
-
Two choices to set response headers
-
headers: set a headers object that will be used to set response header
-
headerMiddleware: default middleware will be replaced by your headerMiddleware setting, and DON'T forget invoke next() in middleware function body
-
Test your building
# test your server
curl -v http://localhost:8800 # response from /
curl -v http://localhost:8800/doc/sample # response from /doc/sample
CHANGELOG
CHANGELOG