该项目是仿照某些网站的留言列表做的一些小功能,项目没有划分 M V C,使用的前台技术是 Bootstrap,后台使用的是 Node.js,模板引擎使用的是 EJS,数据库是 MySQL。
依赖
- Bootstrap
- jQuery
- 使用 jQuery 的 ajax 做异步无刷新列表加载
- EJS
- Node.js
- express
- body-parser express 的中间件(middleware),可以用来解析 post 请求体数据
- mysql
- moment
- express
- js-cookie
安装依赖
1 | $ npm install bootstrap jquery express art-template --save |
package.json (包括项目后面流程安装的依赖包)
1 | { |
页面搭建:Bootstrap
最终完整页面
1 |
|
数据库设计: feedback
名 | 类型 | 长度 | 小数点 | 不是null | 主键 |
---|---|---|---|---|---|
id | int | 空 | 空 | yes | yes |
message | text | 空 | 空 | yes | 空 |
name | varchar | 50 | 空 | yes | 空 |
varchar | 50 | 空 | yes | 空 | |
data | datatime | 空 | 空 | yes | 空 |
页面入口/后台数据处理 app.js
安装依赖:
1 | $ npm install body-parser moment ejs --save |
app.js
1 | const express = require('express'); |
渲染页面 EJS
1 | {{each messages as message index}} |
前台 ajax 请求
1 | $('#form').on('submit', function (e) { |
后台 post 请求处理
? express 的 body-parser 中间件
配置中间键:
1 | app.use(bodyParser.urlencoded({ extended: false })); |
日期格式化包:
1 | $ npm install moment --save |
格式化日期方法:
1 | moment().format('YYYY-MM-DD HH:mm:ss') |
后台处理 post 请求
1 | app.post('/message/add', (req, res, next) => { |
响应给前台后,前台处理响应成功逻辑:
1 | // 是否成功由后台告诉前台 |
注册登录模块
登录页面
注册页面
流程
添加表 users
索引 | 类型 | 长度 | 小数点 | 不是null | 主键 |
---|---|---|---|---|---|
id | int | 50 | 空 | yes | yes |
username | varchar | 50 | 空 | yes | 空 |
password | varchar | 50 | 空 | yes | 空 |
varchar | 50 | 空 | yes | 空 | |
create_time | datetime | 空 | 空 | yes | 空 |
last_signin_time | datetime | 空 | 空 | yes | 空 |
处理注册页面后台逻辑
1 | // 注册请求处理(异步请求表单不会刷新) |
处理注册页面前台逻辑
1 | $('form').on('submit', function (e) { |
记住用户名(通过前台来写)
方法一:
安装插件:
1 | $ npm install js-cookie --save |
设置 cookie:
1 | var username = Cookies.get('username'); |
在 express 中使用 cookie-parser
安装:
1 | $ npm install cookie-parser --save |
配置:
1 | const express = require('express'); |
方法二:session 保持状态
session 和 cookie 结合使用。
在 express 中使用 session
安装:
1 | $ npm install express-session --save |
配置:
1 | const express = require('express'); |
处理用户注册和登录的状态
1 | $ npm install express-session --save |
最终的 app.js
1 | // 引入包 |
处理登录页面
最终的 singin.html
1 | <!-- ... --> |
处理注册页面
最终的 singup.html
1 |
|
数据库连接
连接数据库关键代码:db.js
1 | const mysql = require('mysql'); |
css
1 | body { padding-top: 40px; padding-bottom: 40px; background-color: #eee; } |