您的位置:首页 > Web前端 > Node.js

node实现的一个登陆页面

2013-11-13 21:30 344 查看
1. why node

node最大的特点是高并发,吞吐量大,采用事件驱动,单线程,以及异步IO。我主要是想利用node-webkit中的web界面来实现桌面程序。

2. 登陆系统

(1) 实现一个简单登陆系统,功能为服务器中的合法用户才能登陆,不容许注册。数据存在内存中。

var http = require('http');
var users = [];
users['lcy'] = '123';
users['lcy1'] = '321';

var server = http.createServer(function(req,res)
{
if('/' == req.url)
{
switch(req.method)
{
case 'GET':
show(res);
break;
case 'POST':
login(req,res);
break;
}
}
});
server.listen(3000);

function show(res)
{
var html =  '<form method="post" action="/">'
+ '<label for="username">Username</label>'
+ '<input type="text" id="username" name="username"/>'
+ '<label for="pwd">Password</label>'
+ '<input type="text" id="pwd" name="pwd"/>'
+ '<input type="submit" value="submit"/>'
+ '</form>'
;
res.setHeader('Content-Type', 'text/html');
res.setHeader('Content-Length', Buffer.byteLength(html));
res.end(html);
}

var qs = require('querystring');

function login(req,res)
{
var body = '';
req.setEncoding('utf-8');
req.on('data',function(chunk){body += chunk});
req.on('end',function(){
var obj = qs.parse(body);
if(users[obj.username] == obj.pwd)
{
goForum(obj.username,res);
return;
}
goError(res);
});
}

function goForum(name,res)
{
var html = '<h1>Welcome ' + name + '!</h1>';
res.setHeader('Content-Type', 'text/html');
res.setHeader('Content-Length', Buffer.byteLength(html));
res.end(html);
}

function goError(res)
{
var html = '<script>alert("user is not exist!")</script>'
+ '<form method="post" action="/">'
+ '<label for="username">Username</label>'
+ '<input type="text" id="username" name="username"/>'
+ '<label for="pwd">Password</label>'
+ '<input type="text" id="pwd" name="pwd"/>'
+ '<input type="submit" value="submit"/>'
+ '</form>';
res.setHeader('Content-Type', 'text/html');
res.setHeader('Content-Length', Buffer.byteLength(html));
res.end(html);
}


2. 改进代码,使用mysql来存储用户数据

mysql = require('mysql');

var users = [];

var db = mysql.createConnection(
{
host : '127.0.0.1',
user : 'root',
password : '123456',
database : 'users'
}
);

var query = 'select * from user';
db.query(query,function(err,rows){
if(err) throw err;
for(var i in rows)
{
users[rows[i].username] = rows[i].pwd;
}
});

exports.users = users;


3. 使用EJS模板

<h1>Welcome <%= name %>!</h1>


var ejs = require('ejs');
var fs = require('fs');

function render(file,values)
{
var template = fs.readFileSync(file,'utf-8');
return ejs.render(template,{locals : values});
}

exports.render = render;


var http = require('http');
var mysql = require('./mysql');
var myejs = require('./myejs');
var users = mysql.users;

var server = http.createServer(function(req,res)
{
if('/' == req.url)
{
switch(req.method)
{
case 'GET':
show(res);
break;
case 'POST':
login(req,res);
break;
}
}
});
server.listen(3000);

function show(res)
{
res.end(myejs.render('./login.ejs',{'script' : ''}));
}

var qs = require('querystring');

function login(req,res)
{
var body = '';
req.setEncoding('utf-8');
req.on('data',function(chunk){body += chunk});
req.on('end',function(){
var obj = qs.parse(body);
if(users[obj.username] == obj.pwd)
{
goForum(obj.username,res);
return;
}
goError(res);
});
}

function goForum(name,res)
{
res.end(myejs.render('./success.ejs',{'name' : name}));
}

function goError(res)
{
var script = "alert('user is not exist!');";
res.end(myejs.render('./login.ejs',{'script' : script}));
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: