Skip to content

Instantly share code, notes, and snippets.

View alexpermiakov's full-sized avatar

Alex Permiakov alexpermiakov

  • Berlin, Germany
  • 14:55 (UTC +02:00)
View GitHub Profile
@alexpermiakov
alexpermiakov / server.ts
Last active December 12, 2018 17:10
Basic http server with express
import http from "http";
import express from "express";
const router = express();
const { PORT = 3000 } = process.env;
const server = http.createServer(router);
server.listen(PORT, () =>
console.log(`Server is running http://localhost:${PORT}...`)
);
@alexpermiakov
alexpermiakov / common.ts
Created December 12, 2018 17:21
Basic middleware for our setup
import { Router } from "express";
import cors from "cors";
import parser from "body-parser";
import compression from "compression";
export const handleCors = (router: Router) =>
router.use(cors({ credentials: true, origin: true }));
export const handleBodyRequestParsing = (router: Router) => {
router.use(parser.urlencoded({ extended: true }));
@alexpermiakov
alexpermiakov / index.ts
Created December 12, 2018 17:23
An entry point for middleware
import {
handleCors,
handleBodyRequestParsing,
handleCompression
} from "./common";
export default [handleCors, handleBodyRequestParsing, handleCompression];
@alexpermiakov
alexpermiakov / index.ts
Last active December 14, 2018 07:37
Applies middleware on the router
import { Router } from "express";
type Wrapper = ((router: Router) => void);
export const applyMiddleware = (
middleware: Wrapper[],
router: Router
) => {
for (const f of middleware) {
f(router);
@alexpermiakov
alexpermiakov / server.ts
Last active December 19, 2018 05:45
Middleware enabled
import http from "http";
import express from "express";
import { applyMiddleware } from "./utils";
import middleware from "./middleware";
const router = express();
applyMiddleware(middleware, router);
const { PORT = 3000 } = process.env;
const server = http.createServer(router);
@alexpermiakov
alexpermiakov / index.ts
Created December 12, 2018 17:43
Basic search routing
import { Request, Response } from "express";
export default [
{
path: "/",
method: "get",
handler: async (req: Request, res: Response) => {
res.send("Hello world!");
}
}
@alexpermiakov
alexpermiakov / index.ts
Last active October 9, 2019 09:14
Applies routes
import { Router, Request, Response, NextFunction } from "express";
type Wrapper = ((router: Router) => void);
export const applyMiddleware = (
middlewareWrappers: Wrapper[],
router: Router
) => {
for (const wrapper of middlewareWrappers) {
wrapper(router);
@alexpermiakov
alexpermiakov / errorHandlers.ts
Last active December 15, 2018 17:03
ErrorHandlers middleware
import { Request, Response, NextFunction, Router } from "express";
import { HTTPClientError, HTTP404Error } from "../utils/httpErrors";
const handle404Error = (router: Router) => {
router.use((req: Request, res: Response) => {
throw new HTTP404Error("Method not found.");
});
};
const handleClientErrors = (router: Router) => {
@alexpermiakov
alexpermiakov / server.ts
Created December 15, 2018 16:09
Add error handling
import http from "http";
import express from "express";
import { applyMiddleware, applyRoutes } from "./utils";
import middleware from "./middleware";
import errorHandlers from "./middleware/errorHandlers";
import routes from "./services";
process.on("uncaughtException", e => {
console.log(e);
process.exit(1);
export class HTTP400Error extends HTTPClientError {
readonly statusCode = 400;
constructor(message: string | object = "Bad Request") {
super(message);
}
}
export class HTTP404Error extends HTTPClientError {
readonly statusCode = 404;