Browse Source

Page views tracking

refactor
Hampus Sjöberg 4 years ago
parent
commit
5b35bac6ff
  1. 1
      .gitignore
  2. 3
      index.ts
  3. 24
      pageviews/index.ts
  4. 2
      run-server.sh

1
.gitignore

@ -4,3 +4,4 @@
dist
config/config.ts
pageviews.json

3
index.ts

@ -3,11 +3,14 @@ import { Application, send } from "https://deno.land/x/oak@v7.3.0/mod.ts";
import config from "./config/config.ts";
import router from "./api.ts";
import { bootstrapBlocks } from "./blocks.ts";
import Pageviews from "./pageviews/index.ts";
await bootstrapBlocks();
const app = new Application();
app.use(Pageviews);
app.use(router.routes());
app.use(async (context) => {

24
pageviews/index.ts

@ -0,0 +1,24 @@
import { Middleware } from "https://deno.land/x/oak@v7.3.0/mod.ts";
import { ensureFile } from "https://deno.land/std/fs/mod.ts";
import format from "https://deno.land/x/date_fns@v2.15.0/format/index.js";
await ensureFile("./pageviews.json");
interface IPageViews {
[key: string]: number;
}
const pageViews: IPageViews = JSON.parse((await Deno.readTextFile("./pageviews.json")) || "{}");
const PageviewsMiddleware: Middleware = async function (_, next) {
try {
const date = format(new Date(), "yyyy-MM-dd", {});
pageViews[date] = pageViews[date] ?? 0;
pageViews[date] = pageViews[date] + 1;
await Deno.writeTextFile("./pageviews.json", JSON.stringify(pageViews, null, 2));
} catch (e) {
console.log(e.message);
}
await next();
};
export default PageviewsMiddleware;

2
run-server.sh

@ -6,4 +6,4 @@ mkdir frontend/dist
deno run -A https://deno.land/x/aleph@v0.3.0-alpha.32/cli.ts build frontend --reload
# Run backend
deno run --allow-net --allow-read index.ts
deno run --unstable --allow-net --allow-read --allow-write index.ts

Loading…
Cancel
Save