updated app

This commit is contained in:
2012-05-30 23:00:06 -04:00
parent 6a753904b7
commit da6ad88d48
5545 changed files with 1101709 additions and 60 deletions

View File

@@ -3,7 +3,7 @@
* Module dependencies.
*/
var express = require('express');
var express = require('express');
var store = require('./routes/store');
var db_helper = module.exports = require("./routes/db_helper.js");
var app = module.exports = express.createServer();
@@ -13,6 +13,8 @@ var app = module.exports = express.createServer();
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.set('view options', { pretty: true });
//app.set('view options', { debug: true });
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
@@ -32,11 +34,38 @@ app.configure('production', function(){
// Routes
app.get('/', store.home);
app.get('/', function(req, res) {
// if user is not logged in, ask them to login
if (typeof req.session.username == 'undefined') res.render('home', { title: 'Ninja Store'});
// if user is logged in already, take them straight to the items list
else res.redirect('/items');
});
app.post('/', store.home_post_handler);
app.get('/input', store.input);
app.post('/input', store.input_post_handler);
// display the list of item
app.get('/items', store.items);
app.get('/items', function(req, res) {
var items = db_helper.get_all('employees', function(err, items, fields) {
if (err) {
console.log("async1: " + err);
}
var keys = Object.keys( items );
var fieldkeys = Object.keys( fields );
var employees = items;
emitdata('populate',employees);
if (typeof req.session.username == 'undefined') res.redirect('/');
else res.render('items', { title: 'Ninja Store - Items', username: req.session.username, items:items, keys:keys, fieldkeys:fieldkeys });
});
});
// show individual item
//app.get('/items', store.items);
// show individual item
app.get('/item/:id', store.item);
// show general pages
@@ -50,3 +79,43 @@ app.get('/logout', function(req, res) {
app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
var emitdata = function(channel,data) {
io.sockets.on('connection', function (socket) {
io.sockets.emit(channel, data);
});
};
var addemployee = function(data) {
db_helper.add_employee(data, function(lastId) {
});
db_helper.get_all('employees', function(err, items, fields) {
if (err) {
console.log("async1: " + err);
}
emitdata('populate',items);
});
};
var io = require('socket.io');
io = io.listen(app);
io.configure('development', function(){
io.set('close timeout', '50');
});
io.sockets.on('connection', function(client) {
console.log('Client connected');
// client add new employee
client.on('add employee', function(data) {
console.log("addemployee ")
addemployee(data);
});
});

91
ninja-store/app.jsold Normal file
View File

@@ -0,0 +1,91 @@
/**
* Module dependencies.
*/
var express = require('express');
var store = require('./routes/store');
var db_helper = module.exports = require("./routes/db_helper.js");
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({ secret: 'your secret here' }));
app.use(require('stylus').middleware({ src: __dirname + '/public' }));
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/', store.home);
app.post('/', store.home_post_handler);
app.get('/input', store.input);
app.post('/input', store.input_post_handler);
// display the list of item
app.get('/items', function(req, res) {
var items = db_helper.get_all('new_table', function(err, items, fields) {
if (err) {
console.log("async1: " + err);
}
// don't let nameless people view the items, redirect them back to the homepage
var keys = Object.keys( items );
var fieldkeys = Object.keys( fields );
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
});
if (typeof req.session.username == 'undefined') res.redirect('/');
else res.render('items', { title: 'Ninja Store - Items', username: req.session.username, items:items, keys:keys, fieldkeys:fieldkeys });
});
//socket.join(channel);
//socket.set('channel', channel );
// });
});
// show individual item
app.get('/item/:id', store.item);
// show general pages
app.get('/page', store.page);
app.get('/logout', function(req, res) {
// delete the session variable
delete req.session.username;
// redirect user to homepage
res.redirect('/');
});
app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
var io = require('socket.io');
io = io.listen(app);
io.sockets.on('connection', function(client) {
console.log('Client connected');
});
module.exports = io;
// io.sockets.on('connection', function (socket) {
// socket.emit('news', { hello: 'world' });
// socket.on('my other event', function (data) {
// console.log(data);
// });
// });

View File

@@ -6,5 +6,7 @@
"express": "2.5.8"
, "stylus": ">= 0.0.1"
, "jade": ">= 0.0.1"
, "mysql": ">= 0.9.6"
, "socket.io": ">= 0.9.6"
}
}

View File

@@ -33,8 +33,10 @@ client.query('USE mynode_db');
//});
//console.log('table employees is created.');
// function to create employee
exports.add_employee = function(data, callback) {
console.log('Employee '+data.name+' has salary '+data.salary);
client.query("insert into employees (name, salary) values (?,?)", [data.name, data.salary], function(err, info) {
// callback function returns last insert id
callback(info.insertId);
@@ -43,27 +45,23 @@ exports.add_employee = function(data, callback) {
}
// function to get list of employees
exports.get_employees = function(callback) {
client.query("select * from employees", function(err, results, fields) {
// callback function returns employees array
callback(results);
});
}
exports.get_employees = function(callback) {
client.query("select * from employees", function(err, results, fields) {
//callback function returns employees array
callback(results);
});
}
// function to get list of employees
// function to get data from database
exports.get_all = function(data, callback) {
console.log('Table '+data);
client.query("select * from employees", function(err, results, fields) {
client.query("select * from " + data, function(err, results, fields) {
// callback function returns employees array
console.log('hmmmjson' + JSON.stringify(results));
var ook= "ook"
console.log('hmmmook' + ook);
callback(err,results);
//callback(results);
// Uncomment these if you want lots of feedback
// console.log('Results:');
// console.log(results);
// console.log('Field metadata:');
// console.log(fields);
callback(err,results,fields);
});
}
exports.fake = function(callback) {
console.log('database mynode_db is created.');
};

View File

@@ -1,6 +1,5 @@
var io = require('../app').sio;
var db_helper = require('./db_helper');
var io = require('../app.js').io;
// handler for homepage
exports.home = function(req, res) {
@@ -20,43 +19,80 @@ exports.home_post_handler = function(req, res) {
res.redirect('/');
};
// handler for homepage
exports.input = function(req, res) {
// if user is not logged in, ask them to login
if (typeof req.session.username == 'undefined') res.render('home', { title: 'Ninja Store'});
// if user is logged in already, take them straight to the items list
else res.render('input', { title: 'Ninja Store - Input'});
};
// handler for form submitted from input
exports.input_post_handler = function(req, res) {
// if the username is not submitted, give it a default of "Anonymous"
username = req.body.username || 'Anonymous';
// store the username as a session variable
req.session.username = username;
console.log('Name: ' + req.body.name);
console.log('Salary: ' + req.body.salary);
//add_employee = function(data, callback)
var data = {name:req.body.name,salary:req.body.salary};
db_helper.add_employee(({name:req.body.name,salary:req.body.salary}), function(err, id) {
if (err) {
console.log("oops: " + err);
} else {
console.log('Saved as ' + id);
};
});
// redirect the user to homepage
res.redirect('/');
};
// our 'database'
//var items = {
// SKN:{name:'Shuriken', price:100},
// ASK:{name:'Ashiko', price:690},
// CGI:{name:'Chigiriki', price:250},
// NGT:{name:'Naginata', price:900},
// KTN:{name:'Katana', price:1000}
//};
// var testobj = {
// SKN:{name:'Shuriken', price:100,wow:345},
// ASK:{name:'Ashiko', price:690,wow:345},
// CGI:{name:'Chigiriki', price:250,wow:345},
// NGT:{name:'Naginata', price:900,wow:345},
// KTN:{name:'Katana', price:1000,wow:345}
// };
// handler for displaying the items
exports.items = function(req, res) {
var items = db_helper.get_all('employees', function(err, items) {
var items = db_helper.get_all('new_table', function(err, items, fields) {
if (err) {
console.log("async: " + err);
} else {
console.log('hmmmt1json' + items);
}
console.log('hmmmt1jsoni' + JSON.stringify(items));
console.log("async1: " + err);
}
// don't let nameless people view the items, redirect them back to the homepage
if (typeof req.session.username == 'undefined') res.redirect('/');
else res.render('items', { title: 'Ninja Store - Items', username: req.session.username, items:items });
});
};
var keys = Object.keys( items );
var fieldkeys = Object.keys( fields );
io.sockets.emit('news', { hello: 'world' });
});
if (typeof req.session.username == 'undefined') res.redirect('/');
else res.render('items', { title: 'Ninja Store - Items', username: req.session.username, items:items, keys:keys, fieldkeys:fieldkeys });
};
// handler for displaying individual items
exports.item = function(req, res) {
var test = new db_helper.get_all('employees',function(err, results, fields){
});
var items = db_helper.get_all('employees', function(err, items, fields) {
if (err) {
console.log("async: " + err);
}
// don't let nameless people view the items, redirect them back to the homepage
if (typeof req.session.username == 'undefined') res.redirect('/');
else {
else {
var name = items[req.params.id].name;
var price = items[req.params.id].price;
res.render('item', { title: 'Ninja Store - ' + test[1], username: req.session.username, name:name, price:price });
}
var price = items[req.params.id].salary;
res.render('item', { title: 'Ninja Store - ', username: req.session.username, name:name, price:price });
};
});
};
// handler for showing simple pages

View File

@@ -0,0 +1,14 @@
#container
#logo
a(href='/')
img(src='/images/logo.png')
#display
#login
form(method='post')
| Enter new Name and Salary
div
input(type='text', name='name')
input(type='text', name='salary')
input(type='submit', value='Save')
include footer

View File

@@ -3,8 +3,13 @@
img(src='/images/logo.png')
#display
include userbar
p The #{name.toLowerCase()} is one of the must-have items for any aspiring ninja. It costs just $#{price} on our store.
p Buy it today!
if name == 'admin'
p #{name} is an admin
else
p hmmm
include footer

View File

@@ -4,9 +4,25 @@
#display
include userbar
-for (var id in items)
- var item = items[id]
div
a(href='/item/#{id}') #{item.name} - $#{item.price}
include footer
div
table
thead
- each itemfk in fieldkeys
th= itemfk
tbody
-for (var id in items)
- var item = items[id]
tr
- each itemf in fieldkeys
td= item[itemf]
ul#employees
form#myForm
div.clonedInput#input1
input(type='text', id='employee_name', value='name')
input(type='text', id='employee_salary', value='salary')
div
input(type='button', id='btnAdd', value='add another name')
input(type='button', id='btnDel', value='remove name')
input(type='button', id='save', value='Save')

View File

@@ -3,6 +3,71 @@ html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
<script src="http://localhost:3000/socket.io/socket.io.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
script(src='http://code.jquery.com/jquery-1.6.1.min.js')
script(src='/socket.io/socket.io.js')
script
$(document).ready(function() {
var socket = io.connect('http://localhost:3000');
socket.on('populate', function(data) {
var out = "";
$.each(data, function(i, obj) {
console.log('<li>'+obj.name+' is making '+obj.salary+'</li>');
out += "<li>"+obj.name+" is making "+obj.salary+"</li>";
});
$('#employees').html(out);
});
$('#btnAdd').click(function() {
var num = $('.clonedInput').length; // how many "duplicatable" input fields we currently have
var newNum = new Number(num + 1); // the numeric ID of the new input field being added
// create the new element via clone(), and manipulate it's ID using newNum value
var newElem = $('#input' + num).clone().attr('id', 'input' + newNum);
// manipulate the name/id values of the input inside the new element
newElem.children(':first').attr('id', 'name' + newNum).attr('name', 'name' + newNum);
// insert the new element after the last "duplicatable" input field
$('#input' + num).after(newElem);
// enable the "remove" button
$('#btnDel').prop('disabled',false);
// business rule: you can only add 5 names
if (newNum == 12)
$('#btnAdd').prop('disabled',true);
});
$('#btnDel').click(function() {
var num = $('.clonedInput').length; // how many "duplicatable" input fields we currently have
$('#input' + num).remove(); // remove the last element
// enable the "add" button
$('#btnAdd').prop('disabled',false);
// if only one element remains, disable the "remove" button
if (num-1 == 1)
$('#btnDel').prop('disabled',true);
});
$('#btnDel').attr('disabled',true);
$('#save').click(function() {
if ($('#employee_name').val() == '' || $('#employee_salary').val() == '') {
return alert('Please enter both nam e/salary!');
}
var data = {
name: $('#employee_name').val(),
salary: $('#employee_salary').val()
};
console.log('socketpoking: ' + 'data');
socket.emit('add employee', data);
$('#employee_name').val('');
$('#employee_salary').val('');
});
});
body!= body

View File

@@ -1,5 +1,6 @@
#userbar
| Welcome #{username} |
a(href='/items') Items
a(href='/input') Input
| |
a(href='/logout') Log Out