UNPKG

950 BJavaScriptView Raw
1"use strict"
2
3const http = require("http")
4const stoppable = require("stoppable")
5const {promisify} = require("util")
6
7module.exports = async (logger, requestListener, options={}) => {
8 const server = createServer(requestListener)
9 const origListen = server.listen.bind(server)
10
11 stoppable(server, options.stopTimeout || 1000)
12 server.stop = promisify(server.stop)
13 server.listen = (...args) => {
14 return new Promise((resolve, reject) => {
15 server.once("listening", resolve)
16 server.once("error", reject)
17 origListen(...args)
18 }).then(() => {
19 let host = args[1] || "0.0.0.0"
20 let port = (args[0] && args[0].toString() !== "80") ? `:${args[0]}`: ""
21 logger.info(`Listening for requests on http://${host}${port}...`)
22 })
23 }
24
25 return server
26}
27
28function createServer(requestListener) {
29 const server = http.createServer(requestListener)
30 server.allowHalfOpen = false
31
32 return server
33}