import bodyParser from "body-parser"; import cors from "cors"; import express from "express"; import { getLocalStorage } from "."; import { KeyValueStorage } from "./basic"; import { HEADER_REPLYIER, HEADER_REQUESTER } from "./remote"; type Server = { close: () => Promise } /** * Start a server compliant with RestRemoteStorage */ export function startRestServer(port: number, storage: KeyValueStorage): Promise { const app = express(); app.use( cors({ exposedHeaders: [HEADER_REPLYIER] }), bodyParser.text(), (req, res, next) => { if (req.header(HEADER_REQUESTER)) { res.set(HEADER_REPLYIER, "ok"); next(); } else { res.status(400).send(); } }, ); app.get("*", (req, res, next) => { storage.get(req.path).then(result => { if (result === null) { res.status(404).send(); } else { res.send(result); } }).catch(next); }); app.put("*", (req, res, next) => { storage.set(req.path, req.body).then(() => { res.send(); }).catch(next); }); app.delete("*", (req, res, next) => { storage.set(req.path, null).then(() => { res.send(); }).catch(next); }); return new Promise((resolve) => { const server = app.listen(port, () => { resolve({ close: () => new Promise((resolve, reject) => { server.close((err) => err ? reject(err) : resolve()); }) }) }); }); } if (typeof require !== "undefined" && require.main === module) { startRestServer(5001, getLocalStorage("tk-storage-server")).then(() => { console.log(`Server running, use http://localhost:5001 to connect`); }); }