kill-the-newsletter/src/server.tsx

51 lines
933 B
TypeScript
Raw Normal View History

2020-03-18 04:07:48 +01:00
import express from "express";
import React from "react";
import ReactDOMServer from "react-dom/server";
2020-03-18 18:38:09 +01:00
import {
Inbox,
Layout,
Form,
Created,
Feed,
newToken,
feedPath
} from "./components";
import { Builder } from "xml2js";
2020-03-18 17:22:18 +01:00
import fs from "fs";
2020-03-18 04:07:48 +01:00
const app = express();
app.use(express.static("static"));
2020-03-18 17:22:18 +01:00
app.use(express.urlencoded());
2020-03-18 04:07:48 +01:00
app.get("/", (req, res) =>
2020-03-18 05:49:41 +01:00
res.send(
2020-03-18 16:12:46 +01:00
render(
<Layout>
<Form></Form>
</Layout>
)
2020-03-18 05:49:41 +01:00
)
2020-03-18 04:07:48 +01:00
);
2020-03-18 17:22:18 +01:00
app.post("/", (req, res) => {
2020-03-18 18:38:09 +01:00
const inbox: Inbox = { name: req.body.name, token: newToken() };
fs.writeFileSync(
feedPath(inbox.token),
new Builder().buildObject(Feed(inbox))
);
2020-03-18 17:22:18 +01:00
res.send(
render(
<Layout>
2020-03-18 18:38:09 +01:00
<Created inbox={inbox}></Created>
2020-03-18 17:22:18 +01:00
</Layout>
)
);
});
2020-03-18 16:12:46 +01:00
app.listen(8000);
function render(component: React.ReactElement): string {
return `<!DOCTYPE html>\n${ReactDOMServer.renderToStaticMarkup(component)}`;
}