# 框架
## node.js + Express + mysql + bower
* 生成工程: express --css stylus login
* 运行工程: DEBUG=login:* npm start
## 登录接口
/login 交互方式 post json
参数 username 用户名
参数 password 密码 (md5)
实现:
点击(此处)折叠或打开
实现:
点击(此处)折叠或打开
- var express = require('express');
- var router = express.Router();
- var db = require('./db.js');
- /* GET login listing. */
- router.post('/', function(req, res, next) {
- var data = {};
- data.ret = -1;
- data.msg = "登录失败";
- var name = req.param("name");
- var password = req.param("password");
- db.connection.query("select * from " + db.tb_name + " where name=? ", [name],
- function (err, rows) {
- console.error(rows);
- if (rows.length == 0) {
- // 无此用户名
- data.msg = "无此用户名";
- res.json(data);
- return;
- }
- item = rows[0];
- if (item.password.toUpperCase() == password.toUpperCase()) {
- data.msg = "登录成功";
- data.ret = 0;
- }
- else {
- data.msg = "密码错误";
- data.ret = -2;
- }
- res.json(data);
- return;
- });
- });
- router.get('/', function(req, res, next) {
- res.render('login',
- { title:'用户登录',
- btn_name:"登录",
- post_url:"/login"
- });
- });
- module.exports = router;
## 注册接口
/register 交互方式 post json
参数 username 用户名
参数 password 密码 (md5)
实现:
实现:
点击(此处)折叠或打开
- var express = require('express');
- var router = express.Router();
- var db = require('./db.js');
- function sql_default_cb(err, rows)
- {
- if (err) {
- console.error('error connecting: ' + err.stack);
- return;
- }
- console.error('');
- console.error(rows);
- console.error('');
- }
- /* GET register listing. */
- router.get('/', function(req, res, next) {
- res.render('login',
- { title:'用户注册',
- btn_name:"注册",
- post_url:"/register"
- });
- });
- router.post('/', function(req, res, next) {
- var data = {};
- data.ret = -1;
- data.msg = "登录失败";
- //data.name = req.param("name");
- //data.password = req.param("password");
- var name = req.param("name");
- var password = req.param("password");
- // 注册
- db.connection.query("select * from " + db.tb_name + " where name=?", [name],
- function(err, rows) {
- if (rows.length!=0) {
- data.msg = "用户名重复";
- data.ret = -2;
- res.json(data);
- return;
- }
- // register
- db.connection.query("insert into " + db.tb_name + "(name, password) values (?, ?)", [name, password],
- function(err, rows) {
- if (err) {
- console.error(err);
- data.ret = -3;
- data.msg = "数据库插入错误";
- }
- else {
- data.ret = 0;
- data.msg = "注册成功";
- }
- console.error(rows);
- res.json(data);
- return;
- });
- });
- });
- module.exports = router;
## 表结构描述
字段 | 类型 | 默认值 | 描述 |
_id | int | 主键、自增长 | |
name | varchar | ||
password | varchar |
## 网页端测试代码
网页端测试采用jquery.form来实现
login.jade -> login.html
点击(此处)折叠或打开
- <!DOCTYPE html>
- <html lang="zh">
- <head><title>用户登录</title>
- <meta charset="UTF-8">
- <link href="/bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
- <script src="/bower_components/jquery/dist/jquery.min.js"></script>
- <script src="/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
- <script src="/javascripts/jquery.form.js"></script>
- <script src="/javascripts/jquery.md5.js"></script>
- </head>
- <body>
- <div class="container">
- <div class="row">
- <div style="padding-top:30px; " class="col-md-12">
- <form id="form_Register" role="form" method="post" class="form-horizontal">
- <div class="form-group">
- <div class="col-md-2"></div>
- <h2 id="info" class="alert alert-success col-md-10"></h2></div>
- <div class="form-group"><label for="name" class="col-md-2 control-label">用户名</label>
- <div class="col-md-10"><input id="name" type="text" name="name" placeholder="请输入用户名(英文)" required=""
- class="form-control"></div>
- </div>
- <div class="form-group"><label for="password" class="col-md-2 control-label">密码</label>
- <div class="col-md-10"><input id="password" type="password" placeholder="请输入密码" required=""
- class="form-control"></div>
- </div>
- <div class="form-group">
- <div class="col-md-offset-2 col-md-10">
- <button type="submit" class="btn btn-primary">登录</button>
- </div>
- <div id="result" style="display:none;" class="result"></div>
- </div>
- </form>
- </div>
- </div>
- </div>
- <script>var post_url = "/login";</script>
- <script src="/javascripts/login.js"></script>
- </body>
- </html>
login.js:
点击(此处)折叠或打开
- $(document).ready(function(){
- function log(msg)
- {
- $("#info").text(msg);
- $("#info").show();
- timer.reset();
- }
- $('#form_Register').ajaxForm({
- url: post_url,
- type: "post",
- dataType: "json",
- beforeSubmit: function (arr, $form, options){
- var password_md5 = $.md5($("#password").val());
- arr.push({ name: 'password', value: password_md5 });
- return true;
- },
- success: function(data) {
- switch (data.ret) {
- default:
- log(data.msg);
- break;
- }
- }
- });
- // For Test
- $("#name").val("admin1");
- $("#password").val("123");
- });
## Android测试源码:
采用Volley网络库实现: https://git.oschina.net/caicry/volley
点击(此处)折叠或打开
- View.OnClickListener mBtnLoginCallback = new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- String strName = editName.getText().toString();
- String strPasword = editPassword.getText().toString();
-
- if (strName.length() == 0 ||
- strPasword.length() == 0) {
- showToast(