UNPKG

request-to-json

Version:

Returns a JSON representation of request (supports koa/express requests props)

230 lines (222 loc) 6.13 kB
import { IncomingMessage, Server, createServer, request } from 'http' import Koa, { Context as KoaContext, Request as KoaRequest } from 'koa' import express, { Request as ExpressRequest } from 'express' import requestToJSON from '../index' const PORT = process.env.PORT || 3033 describe('request-to-json', () => { it('should convert a http incomingmessage to json', async () => { const req = await getIncomingMessage() expect(requestToJSON(req)).toMatchInlineSnapshot(` Object { "aborted": false, "complete": true, "headers": Object { "connection": "close", "host": "localhost:3033", }, "httpVersion": "1.1", "method": "GET", "trailers": Object {}, "url": "/", } `) }) it('should convert a express req to json', async () => { const req = await getExpressReq() expect(requestToJSON(req)).toMatchInlineSnapshot(` Object { "aborted": false, "baseUrl": "", "complete": true, "fresh": false, "headers": Object { "connection": "close", "host": "localhost:3033", }, "host": "localhost", "hostname": "localhost", "httpVersion": "1.1", "ips": Array [], "method": "GET", "originalUrl": "/", "params": Object {}, "path": "/", "protocol": "http", "query": Object {}, "secure": false, "stale": true, "subdomains": Array [], "trailers": Object {}, "url": "/", "xhr": false, } `) }) it('should convert a koa req to json', async () => { const req = await getKoaReq() expect(requestToJSON(req)).toMatchInlineSnapshot(` Object { "fresh": false, "headers": Object { "connection": "close", "host": "localhost:3033", "x-custom": "custom", }, "host": "localhost:3033", "hostname": "localhost", "href": "http://localhost:3033/", "ip": "", "ips": Array [], "method": "GET", "origin": "http://localhost:3033", "originalUrl": "/", "path": "/", "protocol": "http", "query": Object {}, "secure": false, "stale": true, "subdomains": Array [], "url": "/", } `) }) it('should convert a koa ctx to json', async () => { const ctx = await getKoaCtx() expect(requestToJSON(ctx)).toMatchInlineSnapshot(` Object { "body": "hello world", "cookies": Object { "secure": false, }, "fresh": false, "headers": Object { "connection": "close", "host": "localhost:3033", "x-custom": "custom", }, "host": "localhost:3033", "hostname": "localhost", "href": "http://localhost:3033/", "ip": "", "ips": Array [], "method": "GET", "origin": "http://localhost:3033", "originalUrl": "/", "path": "/", "protocol": "http", "query": Object {}, "secure": false, "stale": true, "subdomains": Array [], "url": "/", } `) }) }) async function getIncomingMessage(): Promise<IncomingMessage> { let server: Server | undefined const reqPromise = new Promise<IncomingMessage>((resolve) => { server = createServer((req, res) => { res.statusCode = 200 res.write('hello world') res.end() resolve(req) }) }) await new Promise((resolve, reject) => { server.once('error', reject) server.listen(PORT, resolve) }) await new Promise((resolve) => { const req = request(`http://localhost:${PORT}`, (res) => { res.pipe(process.stdout) res.on('end', resolve) resolve() }) req.end() }) await new Promise((resolve, reject) => server.close((err) => (err ? reject(err) : resolve())), ) return await reqPromise } async function getExpressReq(): Promise<ExpressRequest> { const app = express() const reqPromise = new Promise<ExpressRequest>((resolve) => { app.use((req, res) => { res.status(200) res.end('hello world') resolve(req) }) }) let server await new Promise((resolve) => { server = app.listen(PORT, resolve) }) await new Promise((resolve) => { const req = request(`http://localhost:${PORT}`, (res) => { res.pipe(process.stdout) res.on('end', resolve) resolve() }) req.end() }) await new Promise((resolve, reject) => server.close((err) => (err ? reject(err) : resolve())), ) return await reqPromise } async function getKoaReq(): Promise<KoaRequest> { const app = new Koa() const reqPromise = new Promise<KoaRequest>((resolve) => { app.use(async (ctx, next) => { ctx.status = 200 ctx.body = 'hello world' resolve(ctx.request) }) }) let server await new Promise((resolve) => { server = app.listen(PORT, resolve) }) await new Promise((resolve) => { const req = request(`http://localhost:${PORT}`, (res) => { res.pipe(process.stdout) res.on('end', resolve) resolve() }) req.setHeader('x-custom', 'custom') req.end() }) await new Promise((resolve, reject) => server.close((err) => (err ? reject(err) : resolve())), ) return await reqPromise } async function getKoaCtx(): Promise<KoaContext> { const app = new Koa() const reqPromise = new Promise<KoaContext>((resolve) => { app.use(async (ctx, next) => { ctx.status = 200 ctx.body = 'hello world' resolve(ctx) }) }) let server await new Promise((resolve) => { server = app.listen(PORT, resolve) }) await new Promise((resolve) => { const req = request(`http://localhost:${PORT}`, (res) => { res.pipe(process.stdout) res.on('end', resolve) resolve() }) req.setHeader('x-custom', 'custom') req.end() }) await new Promise((resolve, reject) => server.close((err) => (err ? reject(err) : resolve())), ) return await reqPromise }