mirror of
https://github.com/http-party/node-http-proxy.git
synced 2025-12-08 20:59:18 +00:00
65 lines
1.6 KiB
JavaScript
65 lines
1.6 KiB
JavaScript
|
|
//
|
|
// just to make these example a little bit interesting,
|
|
// make a little key value store with an http interface
|
|
// (see couchbd for a grown-up version of this)
|
|
//
|
|
// API:
|
|
// GET /
|
|
// retrive list of keys
|
|
//
|
|
// GET /[url]
|
|
// retrive object stored at [url]
|
|
// will respond with 404 if there is nothing stored at [url]
|
|
//
|
|
// POST /[url]
|
|
//
|
|
// JSON.parse the body and store it under [url]
|
|
// will respond 400 (bad request) if body is not valid json.
|
|
//
|
|
// TODO: cached map-reduce views and auto-magic sharding.
|
|
//
|
|
var Store = module.exports = function Store () {
|
|
this.store = {};
|
|
};
|
|
|
|
Store.prototype = {
|
|
get: function (key) {
|
|
return this.store[key]
|
|
},
|
|
set: function (key, value) {
|
|
return this.store[key] = value
|
|
},
|
|
handler:function () {
|
|
var store = this
|
|
return function (req, res) {
|
|
function send (obj, status) {
|
|
res.writeHead(200 || status,{'Content-Type': 'application/json'})
|
|
res.write(JSON.stringify(obj) + '\n')
|
|
res.end()
|
|
}
|
|
var url = req.url.split('?').shift()
|
|
if(url === '/') {
|
|
console.log('get index')
|
|
return send(Object.keys(store.store))
|
|
} else if(req.method == 'GET') {
|
|
var obj = store.get (url)
|
|
send(obj || {error: 'not_found', url: url}, obj ? 200 : 404)
|
|
} else {
|
|
//post: buffer body, and parse.
|
|
var body = '', obj
|
|
req.on('data', function (c) { body += c})
|
|
req.on('end', function (c) {
|
|
try {
|
|
obj = JSON.parse(body)
|
|
} catch (err) {
|
|
return send (err, 400)
|
|
}
|
|
store.set(url, obj)
|
|
send({ok: true})
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|