1、整个项目的目录结构如下:
2、这里面主要的调整有,还是统一的入口server.js
,只不过在这个入口里面利用require
把不同的模块路由分开了。这样可以保证主入口文件的简洁。
const express = require('express');
const expressStatic = require('express-static');
const bodyParser = require('body-parser');
const multer = require('multer');
const multerObj = multer({dest:'./static/upload'});
const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session');
const consolidate = require('consolidate');
const mysql = require('mysql');
var server = express();
server.use(bodyParser());
server.use(cookieParser());
var keys = [];
for(var i=0;i<10000;i++){
keys[i]="key_"+Math.random();
}
server.use(cookieSession({
name:'session_id',
keys:keys,
maxAge:20*60*1000
}));
// 模板
server.engine('html',consolidate.ejs);
server.set('view engine','html');
server.set('views','template');
// 路由
server.use('/admin',require('./route/admin.js')());
server.use('/web',require('./route/web.js')());
server.use(expressStatic('./static'));
server.listen(1337);
3、下面就是我们的两个分模块:
const express = require('express');
const md5 = require('md5');
const mysql = require('mysql');
module.exports=function(){
var router = express.Router();
router.get('/login',function(req,res){
res.render('./web/login.html',{login_tip:''});
});
router.get('/index',function(req,res){
res.send("i am web index page").end();
});
var db = mysql.createPool({
host:'localhost',
user:'root',
password:'root',
database:'nodejs'
});
router.post('/loginauth',function(req,res){
var newPwd = md5(req.body.pwd);
console.log(req.body.username,newPwd);
// sql语句是用反引号括起来的
db.query(`select * from n_user where USER_NAME='${req.body.username}' and USER_PWD='${newPwd}';`,(err,data)=>{
if (err) {
// 报错
res.send(err).end();
}else{
console.log(data.length);
// 判断是否有查询结果
if (data.length==0) {
res.render('./web/login.html',{login_tip:'用户名或密码错误'});
}else{
res.redirect('/web/index');
}
}
});
});
return router;
}
4、这里需要注意的就是我们使用了res.redirect
方法进行重定向,这里面的查询数据库的结果,可以用data.length
判断是否有结果。我们这里还使用么md5
模块,这个官方的貌似是采用了crypto
,但是我们这边直接用md5
更简洁。
5、这里面还可以利用上cookie-session
进行判断是否已经登录。这里就不写进去了。源代码如下:Node.js简单登录案例