node-blog-原生实现
1. localhost:8080/index.html 访问: /api/blog/list 不需要登录
2. localhost:8080/detail.html?id=1 访问:/api/blog/detail?id=1 不需要登录
3. localhost:8080/login.html 访问:/api/user/login 登录 登录完成后前端跳转 location.href = './admin.html' 后台保存 session 信息
4. localhost:8080/admin.html (博客管理中心页面)
(1): 点击搜索按钮 访问: /api/blog/list?isadmin=1&keyword=xxx 需要登录验证、keyword
(2): 点击删除按钮 访问: /api/blog/del?id=xxx 需要登录验证、id
5. localhost:8080/edit.html?id=5 (编辑页面)
(1): 访问: /api/blog/detail?id=5
(2): 点击保存访问: /api/blog/update?id=5 POST payload
项目架构:
首页:不用登录,可以查看所有博客、详情
博客详情页
登录页
作者主页: 查看自己博客、详情 可新建、编辑、删除
- www.js 层: 创建服务
- app.js 层: 解析 path, query, 处理 post 请求的 data, 引入路由, 处理404
- router 层: 处理路由业务逻辑 并对路由获取到的数据进行包装(成功,失败)。通过不同的URL判断,调用不同的 controller 并且传入参数。
- controller层: 处理数据, 调用 exec(sql).
- db层: 操作数据库
- conf/db.js 连接数据库配置文件:host,port,database,user,passsword
- db/blog.js,redis.js
- 连接 mysql:
mysql.createConnection(MYSQL_CONF).connect();
; 声明:exec(sql){return new Promise(...)}
并导出。 因为这里返回 promise 所以 controller 层,router 层后续返回的都是 promise。 - 连接 redis:
redisClient = redis.createClient(REDIS_CONF.port, REDIS_CONF.host)
。 声明:function set(key, val){redisClient.set(key, val, redis.print)}
并导出。 声明:function get(key) {return new Promise(...)}
并导出。
- 连接 mysql:
- 官网下载
- 不用安装, 解压到本地硬盘如: C:\nginx-1.12.2 (最好不要有中文目录)
- 进入 nginx 根目录 打开控制台 执行 nginx (开启 nginx 服务)
- 检查启动成功:
- 浏览器访问: http://localhost:80 显示欢迎页面
- 也可以执行: tasklist /fi "imagename eq nginx.exe"
- 配置:(本项目相关) (C:\nginx-1.12.2\conf\nginx.conf) (参考: /src/utils/nginx.conf)
- worker_processes 4;
- listen 8080;
- #location / { #root html; #index index.html index.htm; #}
- location / { proxy_pass http://localhost:8001; } location /api/ { proxy_pass http://localhost:8000; proxy_set_header Host $host; }
- 停止|重启 nginx.exe -s stop //停止nginx nginx.exe -s reload //重新加载nginx nginx.exe -s quit //退出nginx