UNPKG

httpism

Version:

HTTP client with middleware and good defaults

99 lines (83 loc) 2.37 kB
var express = require('express') var bodyParser = require('body-parser') var corsMiddleware = require('cors') var cookieParser = require('cookie-parser') var multiparty = require('multiparty') var fs = require('fs-promise') var streamToString = require('../../streamToString') var basicAuth = require('basic-auth-connect') var app = express() app.use(bodyParser.json()) app.use(bodyParser.text()) app.use(bodyParser.urlencoded({ extended: true })) app.use(cookieParser()) var cors = corsMiddleware({ credentials: true, origin: true }) function respond (req, res) { res.json({ url: req.url, body: req.body, method: req.method, headers: req.headers, query: req.query, cookies: req.cookies, xhr: req.xhr }) } app.all('/', cors, function (req, res) { respond(req, res) }) app.delete('/delete', function (req, res) { res.status(204).send() }) app.get('/text', function (req, res) { res.set('Content-Type', 'text/plain') res.send(req.query.text) }) var secret = basicAuth(function (user, pass) { return user === 'user' && pass === 'good' }) app.get('/private', secret, function (req, res) { res.send('private') }) app.get('/cookies', cors, function (req, res) { Object.keys(req.query).forEach(function (key) { res.cookie(key, req.query[key]) }) respond(req, res) }) app.use('/status/:status', function (req, res) { res.status(req.params.status) respond(req, res) }) app.get('/redirect', function (req, res) { res.redirect(req.query.url) }) app.get('/jsonp', function (req, res) { res.set('Content-Type', 'text/javascript') res.send(req.query.callback + "({blah: 'blah'})") }) app.post('/form', function (req, res) { var form = new multiparty.Form() form.parse(req, function (err, fields, files) { if (err) { console.log(err) res.status(500).send({ message: err.message }) } var response = {} Object.keys(fields).forEach(function (field) { response[field] = fields[field][0] }) Promise.all(Object.keys(files).map(function (field) { var file = files[field][0] return streamToString(fs.createReadStream(file.path)).then(function (contents) { response[field] = { contents: contents, headers: file.headers } }) })).then(function () { res.send(response) }) }) }) module.exports = app