1.结合上一篇 安装完Nodejs之后 通过手动创建一个完整的NodeJs项目
2.https://www.jianshu.com/p/7b0a5d4491ba 创建一个完整的项目之后
3.下面是一个完整的项目结构
3.在routes下面新建一个目录为mysql--mysql.js
var mysql = require('mysql'); var dbMsg = { host : 'localhost', user : 'root', password : 'root', database : '数据库名称' } var connection = mysql.createConnection(dbMsg); connection.connect(); module.exports = connection;
4. 配置路由
ar loginRouter = require('./routes/login');
app.use('/login', loginRouter);
5.在routes文件夹下面创建一个login.js
var express = require('express'); var URL = require('url'); var router = express.Router(); var connection = require('./mysql/mysql'); router.post('/user',function(req, res, next){ var params = { username : req.query.username, password : req.query.password } var userStr = 'select * from user_info_t where login_name=? and password=?'; var str = [params.username,params.password]; console.log(userStr) connection.query(userStr,str,function(err,result){ if(err){ throw err; }else{ res.send(result) } }) }); router.get('/', function(req, res, next) { var user = { name:'', age:'', city:'' }; var params = URL.parse(req.url, true).query; if(params.id == '1') { user.name = "Mr.light"; user.age = "1"; user.city = "深圳市"; } else { user.name = "Ms.lee"; user.age = "2"; user.city = "广东市"; } var response = {status:1,data:user}; res.send(JSON.stringify(response)) }); module.exports = router;
启动bin下面的www文件 node www
6.浏览器输入http://127.0.0.1:3000/login
注意:记得安装 npm install mysql 模块
至此一个接口就这样完成了
实现登陆拦截 以及注册等基础功能 上代码
前端两个页面 login.ejs register.ejs index.ejs
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>登录界面</title> <link rel="stylesheet" href="css/reset.css" /> <link rel="stylesheet" href="css/common.css" /> <link rel="stylesheet" href="css/font-awesome.min.css" /> </head> <body> <div class="wrap login_wrap"> <div class="content"> <div class="logo"></div> <div class="login_box"> <div class="login_form"> <div class="login_title"> 登录 </div> <div class="form_text_ipt"> <input name="username" id="username" type="text" placeholder="手机号/邮箱"> </div> <div class="ececk_warning"><span>手机号/邮箱不能为空</span></div> <div class="form_text_ipt"> <input name="password" id="password" type="password" placeholder="密码"> </div> <div class="ececk_warning"><span>密码不能为空</span></div> <div class="form_check_ipt"> <div class="left check_left"> <label><input name="" type="checkbox"> 下次自动登录</label> </div> <div class="right check_right"> <a href="#">忘记密码</a> </div> </div> <div class="form_btn"> <button type="button" οnclick="login();">登录</button> </div> <div class="form_reg_btn"> <span>还没有帐号?</span><a href="register">马上注册</a> </div> <div class="other_login"> <div class="left other_left"> <span>其它登录方式</span> </div> <div class="right other_right"> <a href="#"><i class="fa fa-qq fa-2x"></i></a> <a href="#"><i class="fa fa-weixin fa-2x"></i></a> <a href="#"><i class="fa fa-weibo fa-2x"></i></a> </div> </div> </div> </div> </div> </div> <script type="text/javascript" src="js/jquery-3.3.1.min.js" ></script> <script type="text/javascript" src="js/common.js" ></script> <div style="text-align:center;"> </div> <script> function check(username,password){ if(username==''){ alert('用户名不能为空') return false; } if(password==''){ alert('密码不能为空') return false; } return true; } function login () { var username = $('#username').val(); var password = $('#password').val(); var params = ({ username: username, password : password }) if(check(username,password)){ $.ajax({ type:"post", url:"/login/login", async:true, data:params, success:function(data){ if(data.code=='1'){ alert('用户名或密码错误') }else{ location.href='/index'; } } }); } } </script> </body> </html>
register
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>注册界面</title> <link rel="stylesheet" href="css/reset.css" /> <link rel="stylesheet" href="css/common.css" /> <link rel="stylesheet" href="css/font-awesome.min.css" /> </head> <body> <div class="wrap login_wrap"> <div class="content"> <div class="logo"></div> <div class="login_box"> <div class="login_form"> <div class="login_title"> 注册 </div> <div class="form_text_ipt"> <input name="username" id="username" type="text" placeholder="手机号/邮箱"> </div> <div class="ececk_warning"><span>手机号/邮箱不能为空</span></div> <div class="form_text_ipt"> <input name="password" id="password" type="password" placeholder="密码"> </div> <div class="ececk_warning"><span>密码不能为空</span></div> <div class="form_text_ipt"> <input name="repassword" id="repassword" type="password" placeholder="重复密码"> </div> <div class="ececk_warning"><span>密码不能为空</span></div> <!--<div class="form_text_ipt"> <input name="code" type="text" placeholder="验证码"> </div>--> <div class="ececk_warning"><span>验证码不能为空</span></div> <div class="form_btn"> <button type="button" οnclick="register();">注册</button> </div> <div class="form_reg_btn"> <span>已有帐号?</span><a href="/">马上登录</a> </div> <div class="other_login"> <div class="left other_left"> <span>其它登录方式</span> </div> <div class="right other_right"> <a href="#"><i class="fa fa-qq fa-2x"></i></a> <a href="#"><i class="fa fa-weixin fa-2x"></i></a> <a href="#"><i class="fa fa-weibo fa-2x"></i></a> </div> </div> </div> </div> </div> </div> <script type="text/javascript" src="/js/jquery-3.3.1.min.js" ></script> <script type="text/javascript" src="js/common.js" ></script> <div style="text-align:center;"> </div> <script> function register(){ var password = $('#password').val(); var username = $('#username').val(); var repassword = $('#repassword').val(); var params = ({ password: password, username: username }) if(check(username,password,repassword)){ $.ajax({ type:"post", url:"/login/register", data:params, dataType:'json', success:function(data){ if(data.code=="0"){ alert('注册成功请登录'); window.location.href="/"; } } }); } } function check(username,password,repassword){ if(username==''){ alert('手机号不能为空!') return false; } if(password =='' || repassword==''){ alert('密码不能为空!') return false; } if(password!=repassword){ alert('两次密码不一致!') return false; } return true; } </script> </body> </html>
index.ejs
<!DOCTYPE html> <html> <head> <title><%= title %></title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <script src="/js/jquery-3.3.1.min.js"></script> <script src="/js/vue/dist/vue.js"></script> <script src="/js/vue-spinner/dist/vue-spinner.min.js"></script> <h1><%= title %></h1> <p>Welcome to <%= title %></p> <div id="app"> <button type="button" @click="ajax()">获取参数</button> <br> <br> <br> <table border="1"> <tr> <td>id</td> <td>年龄</td> <td>电话</td> <td>姓名</td> </tr> <template v-for="(items,index) in data"> <tr> <td>{{items.id}}</td> <td>{{items.age}}</td> <td>{{items.phone_number}}</td> <td>{{items.user_name}}</td> </tr> </template> </table> </div> <script> var queryWarnReportData = function (params, callback) { $.ajax({ method: "get", url: '/query', data: params, success: callback, error: function (response) { console.error(response) } }); } </script> <script> var defaultParams={}; var PulseLoader = VueSpinner.PulseLoader; var app = new Vue({ el: '#app', data: { queryParams: defaultParams, data: { pageNum:0, pages:0, }, show: true, color: '#43A5C9', }, components: { PulseLoader }, methods: { updateData: () => { Vue.set(app, 'show', true); queryWarnReportData(app.queryParams, (data) => { Vue.set(app, 'show', false); Vue.set(app, 'data', data); }) },ajax:()=>{ var params = ({ username : 'admin', password : '25b7f5afee0d962a' }); $.ajax({ type:"post", url:"/login/user", data:params, dataType:"json", success:function(data){ var str = ''; $.each(data, function(index,obj) { console.log(obj.id); }); } }); }, }, created: () => queryWarnReportData(defaultParams, (data) => { Vue.set(app, 'show', false); Vue.set(app, 'data', data); }), }); </script> </body> </html>
配置拦截 app.js
npm install express-session 下载模块
var createError = require('http-errors'); var express = require('express'); var path = require('path'); var cookieParser = require('cookie-parser'); var logger = require('morgan'); var session = require('express-session'); var indexRouter = require('./routes/index'); var usersRouter = require('./routes/users'); var loginRouter = require('./routes/login'); var queryRouter = require('./routes/query'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(logger('dev')); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use(cookieParser()); app.use(session({ resave: true, // don't save session if unmodified saveUninitialized: false, // don't create session until something stored secret: 'admin', //密钥 name: 'testapp', //这里的name值得是cookie的name,默认cookie的name是:connect.sid cookie: { maxAge: 80000 } //设置maxAge是80000ms,即80s后session和相应的cookie失效过期 })); //登录拦截器 app.use(function (req, res, next) { var url = req.originalUrl; console.log("session"+req.session.user) if (url != "/login/login" && url != "/login/register" && url != "/" &&!req.session.user) { return res.redirect("/"); } next(); }); app.use('/', indexRouter); app.use('/users', usersRouter); app.use('/login', loginRouter); app.use('/query', queryRouter); // catch 404 and forward to error handler app.use(function(req, res, next) { next(createError(404)); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app;
session 存放 login.js
var express = require('express'); var URL = require('url'); var router = express.Router(); var connection = require('./mysql/mysql'); var bodyParser = require('body-parser'); var session = require('express-session'); router.use(bodyParser.urlencoded({extended:false})); router.post('/login',function(req, res, next){ var params = { username : req.body.username, password : req.body.password } var userStr = 'select * from sys_user where login_name=? and password=md5(?)'; var str = [params.username,params.password]; connection.query(userStr,str,function(err,user){ if(!user[0]){ res.send({error:'用户名或密码错误!','code':'1'}) }else{ req.session.user = user[0]; console.log(req.session.user) res.send({error:'登陆成功!','code':'0'}) } }) }); router.get('/query', function(req, res, next) { var user = { name:'', age:'', city:'' }; var params = URL.parse(req.url, true).query; if(params.id == '1') { user.name = "Mr.light"; user.age = "1"; user.city = "深圳市"; } else { user.name = "Ms.lee"; user.age = "2"; user.city = "广东市"; } var response = {status:1,data:user}; res.send(JSON.stringify(response)) }); //用户注册 router.post('/register', function(req, res, next) { var params = { username : req.body.username, password : req.body.password } var userStr = 'insert into sys_user (login_name,phone_number,password,create_time,user_name) values (?,?,md5(?),now(),?)'; var str = [params.username,params.username,params.password,params.username]; connection.query(userStr,str,function(err,result){ if(err){ throw err; }else{ var datas = {'code':'0','msg':'注册成功'}; res.send(datas) } }) }); module.exports = router;
index.js
var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('login', { title: 'Express' }); }); router.get('/register', function(req, res, next) { res.render('register', { title: 'Express' }); }); router.get('/index', function(req, res, next) { res.render('index', { title: 'Express' }); }); module.exports = router;