mirror of
https://github.com/sstent/node.git
synced 2026-01-25 14:42:00 +00:00
updated app
This commit is contained in:
@@ -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
91
ninja-store/app.jsold
Normal 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);
|
||||
// });
|
||||
// });
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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.');
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
14
ninja-store/views/input.jade
Normal file
14
ninja-store/views/input.jade
Normal 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
|
||||
@@ -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
|
||||
@@ -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')
|
||||
@@ -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
|
||||
@@ -1,5 +1,6 @@
|
||||
#userbar
|
||||
| Welcome #{username} |
|
||||
a(href='/items') Items
|
||||
a(href='/input') Input
|
||||
| |
|
||||
a(href='/logout') Log Out
|
||||
Reference in New Issue
Block a user