aboutsummaryrefslogtreecommitdiffstats
path: root/src/nodejs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/nodejs/no1.js17
-rw-r--r--src/nodejs/no2.js106
-rw-r--r--src/nodejs/start.js79
3 files changed, 159 insertions, 43 deletions
diff --git a/src/nodejs/no1.js b/src/nodejs/no1.js
new file mode 100644
index 0000000..feb3dfb
--- /dev/null
+++ b/src/nodejs/no1.js
@@ -0,0 +1,17 @@
+var clutch = require('clutch');
+
+function helloSomeone(req, res, name,bbox, key, value) {
+ res.writeHead(200, {'Content-Type': 'text/plain'});
+ res.end('obj:'+name+ ' bbox: '+ bbox + ' key:' +key +' value:'+value+'!\n');
+}
+
+function helloWorld(req, res) {
+ helloSomeone(req, res, 'World');
+}
+
+myRoutes = clutch.route404([['GET /hello/(\\w+)(\\[bbox=(\\d,\\d,\\d,\\d)\\])*\\[(\\w+)=(\\w+)\\]$', helloSomeone],
+ ['GET /hello/$', helloWorld]]);
+
+
+var http = require('http');
+http.createServer(myRoutes).listen(3000, '127.0.0.1');
diff --git a/src/nodejs/no2.js b/src/nodejs/no2.js
new file mode 100644
index 0000000..233b5e1
--- /dev/null
+++ b/src/nodejs/no2.js
@@ -0,0 +1,106 @@
+var users = [
+ { name: 'tj' },
+ { name: 'tim' }
+];
+
+function user(app) {
+ app.resource('/.:format?', {
+ 'get' : function(req, res, next) {
+ switch (req.params.format) {
+ case 'json':
+ var body = JSON.stringify(users);
+ res.writeHead(200, {
+ 'Content-Type': 'application/json',
+ 'Content-Length': body.length
+ });
+ res.end(body);
+ break;
+ default:
+ var body = '<ul>'
+ + users.map(function(user) {
+ return '<li>' + user.name + '</li>';
+ }).join('\n')
+ + '</ul>';
+ res.writeHead(200, {
+ 'Content-Type': 'text/html',
+ 'Content-Length': body.length
+ });
+ res.end(body);
+ }
+ }
+ });
+
+ app.resource('/:id.:format', {
+ 'get' : function(req, res, next) {
+ var user = users[req.params.id];
+ if (user && req.params.format === 'json') {
+ user = JSON.stringify(user);
+ res.writeHead(200, {
+ 'Content-Type': 'application/json',
+ 'Content-Length': user.length
+ });
+ res.end(user);
+ }
+ else {
+ // When true is passed, provide control
+ // back to middleware, skipping route
+ // match attemps
+ next(true);
+ }
+ }
+ })
+
+ app.resource('/\\[:id/:op?', {
+ 'get' : function(req, res) {
+ var body = users[req.params.id]
+ ? users[req.params.id].name
+ : 'User ' + req.params.id + ' does not exist';
+ body = (req.params.op || 'view') + 'ing ' + body;
+ res.writeHead(200, {
+ 'Content-Type': 'text/html',
+ 'Content-Length': body.length
+ });
+ res.end(body, 'utf8');
+ }
+ })
+}
+
+
+function main(app) {
+ app.resource('/', {
+ 'get' : function(req, res) {
+ var examples = [
+ '/users',
+ '/users.json',
+ '/users/0 (or /users/0/view)',
+ '/users/0/edit',
+ '/users/0.json'
+ ];
+ var body = 'Visit one of the following: <ul>'
+ + examples.map(function(str) {
+ return '<li>' + str + '</li>'
+ }).join('\n')
+ + '</ul>';
+ res.writeHead(200, {
+ 'Content-Type': 'text/html',
+ 'Content-Length': body.length
+ });
+ res.end(body, 'utf8');
+ }
+ });
+}
+
+
+var connect = require('connect');
+var resource = require('resource-router');
+
+var server = connect.createServer(
+ connect.logger({ buffer: true }),
+ connect.cache(),
+ connect.gzip()
+ );
+
+server.use('/users', resource(user));
+server.use(resource(main));
+server.listen(3000);
+console.log('Connect server listening on port 3000');
diff --git a/src/nodejs/start.js b/src/nodejs/start.js
index c664cfe..b92c757 100644
--- a/src/nodejs/start.js
+++ b/src/nodejs/start.js
@@ -6,52 +6,45 @@ var http = require('http'),
querystring = require('querystring');
// config
-var connectionString = "pg://user:pass@localhost/xapi"
-
-
-function getDataBaseResult(tag,bbox,res) {
- pg.connect(connectionString,function(err,client) {
- var the_result;
-
- if (err) {
- console.log(err);
- }
- else {
- client.query(createQuery(tag,bbox),function(err,result) {
- if (err) {
- console.log(err);
- }
- else {
- console.log(result);
- res.write(result.rows);
- res.end("\n");
- }
- });
- }
- });
+var connectionString = "pg://yves:test@localhost/xapi"
+
+
+function getDataBaseResult(tag,bbox,res){
+pg.connect(connectionString,function(err,client){
+ var the_result;
+ if(err){
+ console.log(err);
+ } else {
+ client.query(createQuery(tag,bbox),function(err,result){
+ if (err) {
+ console.log(err);
+ } else {
+ console.log(result);
+ res.write(result.rows);
+ res.end("/n");
+ }
+
+ });
+ }
+});
}
function createQuery(tag,bbox){
// FIXME: validate
- // var table = tag[0] + "#" + tag[1];
- // var filter = "";
-
- // // input validation
- // for(i=0;i<bbox.length;i++){
- // bbox[i] = parseFloat(bbox[i]);
- // }
-
- // if(bbox){
- // filter = "WHERE longitude > " + bbox[0] + " AND longitude < " + bbox[1] +
- // " AND latitude > " + bbox[2] + " AND latitude < " + bbox[3];
- // }
+ var table = tag[0] + "#" + tag[1];
+ var filter = "";
+ // input validation
+ for(i=0;i<bbox.length;i++){
+ bbox[i] = parseFloat(bbox[i]);
+ }
- return "SELECT id, tags, linestring \
- FROM ways \
- WHERE (tags @> '\"amenity\"=>\"pub\"' AND \
- lseg(linestring) @ box('(13.0882097323,52.3418234221)'::point,'(13.7606105539,52.6697240587)'::point));"
+ if(bbox){
+ filter = "WHERE longitude > " + bbox[0] + " AND longitude < " + bbox[1] +
+ " AND latitude > " + bbox[2] + " AND latitude < " + bbox[3];
+ }
+ return "SELECT * FROM \"" + table + "\" " + filter + ";";
}
@@ -74,13 +67,13 @@ http.createServer(function (req, res) {
}
base_url_re.exec(req.url);
var type = RegExp.$1, url_rest = querystring.unescape(RegExp.$2);
-
+
var filters = [];
while (v = filter_re.exec(url_rest)) {
filters.push(v[1]);
}
console.log(filters);
-
+
var tag;
var bbox;
@@ -97,10 +90,10 @@ http.createServer(function (req, res) {
console.log(tag);
console.log(bbox);
- getDataBaseResult(tag,bbox,res);
+ getDataBaseResult(tag,bbox,res);
res.writeHead(200, {'Content-Type': 'text/plain; charset=utf8', });
-
+
res.write('URL was: ' + req.url + '\n');
res.write('type: ' + type + '\n');
res.write('filters:\n');