dk-bff-server
v3.4.5
Published
Simple Backend-For-Frontend server
Downloads
461
Readme
Simple Backend-For-Frontend server
[!WARNING]
It's fine if you use this library from NPM package with a static versioning in case you want it for some pet-project or to test it's capabilities.But for production use it's strongly recommended to create a fork, because I do not write Changelogs and may break / add some functionality without notice.
Extensible BFF server based on Express that handles static and security.
Features
- Handles static resources with Brotli/Gzip support (should be generated by bundler)
- Supports security rules
- Supports HTTPS (locally) / HTTP protocols
- Supports async template modifications for SSR
- Restricts cache for HTML template
- Can respond with
versionIdentifier
using GET/get-app-version
for notifying users when new version is released - Handles 404 errors
- Gathers performance metrics that could be injected in template
Usage
- Create file ex. ./server.ts
import path from 'path';
import { runServer } from 'dk-bff-server';
import { env } from '../env';
import { paths } from '../paths';
void runServer({
port: env.EXPRESS_PORT, // number
https: env.HTTPS_BY_NODE, // boolean
templatePath: path.resolve(paths.build, 'template.html'), // path string
staticFilesPath: paths.build, // path string
versionIdentifier: env.GIT_COMMIT, // string
compressedFilesGenerated: env.GENERATE_COMPRESSED, // boolean
templateModifier: ({ template }) => {
return Promise.resolve(
template
.replace(
'<!-- HOST_DEPENDENT_CONFIG -->',
JSON.stringify({
API_HOST: env.API_HOST,
IMAGE_STORAGE_URL: env.IMAGE_STORAGE_URL,
})
)
);
},
injectMeasures: ({ template, measures }) =>
template.replace('<!-- MEASURES -->', JSON.stringify({ server: measures }, null, 2)),
customMiddlewares: [
(app) => {
// your middlewares
// app.use(cookieParser());
}
],
/**
* @docs: https://github.com/helmetjs/helmet
* @docs: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
*/
helmetOptions: {
contentSecurityPolicy: {
directives: {},
}
},
});
- Build via you bundler
- Start using recipe in package.json, ex.
{
"scripts": {
"start": "node -r dotenv/config ./build/server.js"
}
}