项目说明
需求功能分析
开发步骤
1.快速生成一个项目
①npm install -g express-generator (打开cmd在NPM中安装Express项目生成器)
② express -e blog(生成ejs模板的Express博客项目)
③npm install (安装项目依赖)
其中public中存放静态资源,routes中存放路由文件;view中存放ejs模板文件;在app.js文件中的内容有引入项目模块,使用中间件,使用路由以及处理404错误
④在app.js中添加监听器listen
// 监听器
app.listen(3000,function(){
console.log('listening port 3000');
});
⑤使用NPM安装normalize.css库 用于同一各个浏览器的默认样式
npm install normalize.css
⑥通过node app 开启项目
设计和实现登录页面
前端部分
登录页面由表单组成,核心思想是利用用户提交的用户名和密码等信息与后端数据库中的信息进行对比,根据对比结果反馈给用户,信息匹配一致,将用户页面重定向至用户需要进入的页面,若信息匹配不一致,将错误信息反馈给用户;
①实现一个前端页面
1.在routes文件夹下的index.js 文件中添加登录页的路由(请求一个get方式的路由,并渲染模板引擎文件夹下login视图模板)
// 登录页
router.get('/login',(req,res,next)=>{
res.render('login');//请求一个get方式的路由,并渲染模板引擎文件夹下login视图模板
});
2.重构登录页面(在views文件夹下新建login.ejs文件)
3.对这个页面进行样式开发(main.css 文件中写整个项目的文件)
②后端部分
核心:将用户提交信息和数据库中的信息进行比较,从而得出结果
1: 在项目的根目录下新建一个config.js文件 进行数据库的配置
// 数据库的相关信息
const DB={
host:"localhost",
port:3306,
user:'root',
password:'',
database:'blog'
};
module.exports=DB;
2:在项目的根目录下新建一个database.js 的文件 用于连接mysql
// 加载数据库驱动
const mysql=require('mysql');
const config=require('./config.js');
// 连接数据库
const database=mysql.createConnection({
host:config.host,
user:config.user,
port:config.port,
password:config.password,
database:config.database
});
// 执行连接操作
database.connect();
module.exports=database;
3.由于在设计数据库时 用户的密码是通过md5加密后存储的,所以用户提交的数据也需要通过md5加密后才能对比
注:md5是一种不可逆的加密算法,只能用穷举枚举等暴力方法破解,如:e10adc3949ba59abbe56e057f20f883e 原密码是123456
在Node.js提供了crypto模块 crypto模块的目的是为了提供通用的加密和哈希算法
在route文件夹下的index.js中引入cypto 和database模块
const crypto=require('crypto');
const mysql=require('./../database');
// 登录信息验证
router.post('/login', (req, res, next)=> {
var name = req.body.name;
var password = req.body.password;
var hash = crypto.createHash('md5');
hash.update(password);
password = hash.digest('hex');
var query = 'SELECT * FROM author WHERE authorName=' + mysql.escape(name) + ' AND authorPassword=' + mysql.escape