Skip to content

Instantly share code, notes, and snippets.

@swashcap
Last active September 4, 2019 00:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save swashcap/7f95fe2b46cec27fc87c2ae51ee3f419 to your computer and use it in GitHub Desktop.
Save swashcap/7f95fe2b46cec27fc87c2ae51ee3f419 to your computer and use it in GitHub Desktop.
Passing around stuff: what's nicest?
import http from 'http'
import { print } from 'util'
type Logger = (...args: Parameters<typeof print>) => void
const logMe = (logger: Logger) => {
const getMaybeSomeData = () => {
logger('get maybe some data')
return Math.random() > .5 ? 'something' : undefined
}
const getMoreData = (id: string) => {
logger('get more data')
return {
id,
maybe: getMaybeSomeData()
}
}
const getData = (req: http.IncomingMessage) => {
logger('get data')
return {
data: getMoreData('101')
}
}
return { getData }
}
const server = http
.createServer((req, res) => {
const requestId = Date.now()
const logger: Logger = (fmt: string, ...args: any[]) => {
print(`[%s] ${fmt}`, requestId, ...args)
}
try {
res.writeHead(200, { 'Content-Type': 'application/json' })
res.end(logMe(logger).getData(req))
} catch (error) {
console.error(error);
res.writeHead(500, { 'Content-Type': 'application/json' })
res.write({ message: error.message })
}
})
.listen(3000 || process.env.PORT, (err: any) => {
if (err) {
console.error(err)
process.exit(1)
}
console.log('Listening at:', server.address())
})
import http from 'http'
import { print } from 'util'
type Logger = (...args: Parameters<typeof print>) => void
const getMaybeSomeData = (logger: Logger) => {
logger('get maybe some data')
return Math.random() > .5 ? 'something' : undefined
}
const getMoreData = (id: string, logger: Logger) => {
logger('get more data')
return {
id,
maybe: getMaybeSomeData(logger)
}
}
const getData = (req: http.IncomingMessage, logger: Logger) => {
logger('get data')
return {
data: getMoreData('101', logger)
}
}
const server = http
.createServer((req, res) => {
const requestId = Date.now()
const logger: Logger = (fmt: string, ...args: any[]) => {
print(`[%s] ${fmt}`, requestId, ...args)
}
try {
res.writeHead(200, { 'Content-Type': 'application/json' })
res.end(getData(req, logger))
} catch (error) {
console.error(error);
res.writeHead(500, { 'Content-Type': 'application/json' })
res.write({ message: error.message })
}
})
.listen(3000 || process.env.PORT, (err: any) => {
if (err) {
console.error(err)
process.exit(1)
}
console.log('Listening at:', server.address())
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment