express-as-promise
v2.0.1
Published
Simple Promise wrapper for Express
Downloads
14,624
Readme
express-as-promise
ExpressAsPromise is a simple Promise wrapper for Express. It also adds some convenient methods & properties which are especially useful for testing.
Usage
The package returns a class.
Instances can be created without any options.
The actual express object is available as .app
property.
The methods .listen
and .stop
start and stop the listener.
The .url
property contains a string to the base URL.
Methods
async fetch(url, options)
: Makes a request withnode-fetch
to the express server. Theurl
is expanded using the servers base URL. If the server isn't listening yet, the server starts listening on a random port.async listen(port, host)
: Forwards the optionalport
andhost
parameters to express method. Returns the base URL as string.async stop()
: Stops the listener.
Properties
.app
: The actual express object..url
: The base URL of the listener.
withServer
The withServer
function can be imported from express-as-promise/withServer.js
.
It creates a server instance and hands it over to an async callback function.
Once the callback function finished with resolve or reject, it stops the server and forwards the error if it finished with reject.
This function is intended for testing using a pattern like shown in the examples below.
Examples
Simple example which adds one route, starts the server, write the base URL to the console and waits 10s before it stops the server.
import { setTimeout } from 'node:timers/promises'
import ExpressAsPromise from 'express-as-promise'
async function main () {
// creates a new instance which also creates an express object
const server = new ExpressAsPromise()
server.app.get('/', (req, res) => {
res.send('Hello World!')
})
// starts the listener and writes the base URL to the console
console.log(await server.listen())
// wait 10s...
await setTimeout(10000)
// ...then stop the server
await server.stop()
}
main()
The following example starts a server with withServer
, adds a route, makes a request.
Once the function is finished, the server is automatically stopped.
import withServer from 'express-as-promise/withServer.js'
async function main () {
await withServer(async server => {
server.app.get('/test', (req, res) => {
res.end('test response')
})
const res = await server.fetch('/test')
const content = await res.text()
console.log(content)
})
}
main()