node.js第六天、第七天笔记

Node.js 第6天课堂笔记

知识点

  • 多人社区案例

反馈

复习

  • MongoDB 数据库
    • 灵活
    • 不用设计数据表
    • 业务的改动不需要关心数据表结构
    • DBA 架构师 级别的工程师都需要掌握这项技能
      • 设计
      • 维护
      • 分布式计算
  • mongoose
    • mongodb 官方包也可以操作 MongoDB 数据库
    • 第三方包:WordPress 项目开发团队
    • 设计 Schema
    • 发布 Model(得到模型构造函数)
      • 查询
      • 增加
      • 修改
      • 删除
  • Promise
    • http://es6.ruanyifeng.com/#docs/promise
    • callback hell 回调地狱
    • 回调函数中套了回调函数
    • Promise(EcmaScript 6 中新增了一个语法 API)
    • 容器
      • 异步任务(pending)
      • resolve
      • reject
    • then 方法获取容器的结果(成功的,失败的)
    • then 方法支持链式调用
    • 可以在 then 方法中返回一个 promise 对象,然后在后面的 then 方法中获取上一个 then 返回的 promise 对象的状态结果

7.path路径操作模块

path.basename('c:a/b/c/index.js')=====>index.js获取文件名,默认包含扩展名
path.basename('c:/a/b/c/index.js','.js')=====>index  去掉扩展名

path.dirname('c:/a/b/c/index.js')======>'c:/a/b/c'    获取目录
path.extname('c:/a/b/c/index.js')======>'.js'   获取扩展名
path.isAbsolute('c:/a/b/c/index.js')======>true   判断是否绝对路径
path.parse('c:/a/b/c/index.js')======>{
                                          root: 'c:/',
                                          dir: 'c:/a/b/c',
                                          base: 'index.js',
                                          ext: '.js',
                                          name: 'index'
                                        }
 path.join('c:/a','b')=========> 'c:\\a\\b    拼接路径,可以有多个

8.Node中的其他非模块成员

在每个模块中,除了require exports等模块相关API外,还有两个特殊成员:

  • __dirname用来动态获取当前文件模块所属目录的绝对路径
  • __filename用来动态获取当前文件的绝对路径

在文件操作中,使用相对路径不可靠,因为在node中文件操作的路径被设计为相对于执行node命令所处的路径。

解决办法:

只需要把相对路径编程绝对路径即可。这里使用__dirnane或者__filename帮我们解决

为了避免手动拼接目录带来错误,推荐多使用path.join()来辅助拼接。

9.多人社区项目开始

1.目录结构

1	.
2	|-app.js		项目的入口文件
3	|-controllers
4	|-models		存储使用mongoose设计的数据模型
5	|-node_modules	第三方包
6	|-package.json	包描述文件
7	|-package-lock-json	第三方包版本锁定文件(npm5以后才有)
8	|-public	公共静态资源
9	|-README.MD	项目说明文件
10	|-routers	如果项目复杂,代码量大,最好把所有的路由按照业务的分类存储到routers目录中
11	|-router.js		简单一点,把所有的路由都放到这个文件
12	|-views	存储视图目录

2.模板页

  • art-template子模板
  • art-template模板继承

3.路由设计

路径方法get参数post参数是否需要登录权限备注
/GET渲染首页
/registerGET渲染注册页面
/registerPOSTemail、nickname、password处理注册请求
/loginGET渲染登录页面
/loginPOSTemail、password处理登录请求
/logoutGET处理用户退出请求

4.模型设计

5.功能实现

6.书写步骤

  • 创建目录结构
  • 整合静态页-模板页
    • include
    • block
    • extend
  • 设计用户登录、退出、注册的路由
  • 用户注册
    • 先处理好客户端页面内容(表单控件name、收集表单数据、发送请求)
    • 服务端
      • 获取客户端表单请求数据
      • 操作数据库
        • 如果有错,发送500状态码
        • 其他根据业务发送不同的状态码
  • 用户登录
  • 用户退出
    • 服务端重定向针对异步请求无效
    • window.location.href = '/'

下午总结

  • path 模块
  • __dirname 和 __filename
    • 动态的 获取当前文件或者文件所处目录的绝对路径
    • 用来解决文件操作路劲的相对路径问题
    • 因为在文件操作中,相对路径相对于执行 node 命令所处的目录
    • 所以为了尽量避免这个问题,都建议文件操作的相对路劲都转为:动态的绝对路径
    • 方式:path.join(__dirname, '文件名')
  • art-template 模板引擎(include、block、extend)
    • include
    • extend
    • block
  • 表单同步提交和异步提交区别
    • 以前没有 ajax 都是这么干的,甚至有些直接就是渲染了提示信息出来了
    • 异步提交页面不会刷新,交互方式更灵活
  • Express 中配置使用 express-session 插件
  • 概述案例中注册-登陆-退出的前后端交互实现流程

Node.js 第7天课堂笔记

Express

1.中间件

[]: http://expressjs.com/en/guide/using-middleweare.html

中间件的本质就是一个请求处理方法,我们把用户从请求到响应的整个过程分发到多个中间件中去处理,这样做的目的是提高代码的灵活性,动态可扩展的。

  • 同一个请求经过的中间件都是同一个请求对象和响应对象
1.1 应用程序级别中间件

万能匹配(不关心任何请求路径和请求方法)

app.use(function(req, res, next){
    console.log('Time',Date.now())
    next()
})//调用了next()则继续向下执行,找到匹配的第一个中间件
//如果没有调用next()则停止,停留在当前中间件

只要是以’/xxxx’开头的请求

app.use('/a', function (req, res,next){
    console.log('Time:',Date.now())
    next()
})
1.2 路由级别中间件

get:

app.get('/',function(req,res,next){
    res.send('hello world')
})

post:

app.post('/',function(req,res,next){
    res.send('Got a post request')
})

put:

app.put('/',function(req,res,next){
    res.send('Got a put request')
})

delet:

app.delet('/',function(req,res,next){
    res.send('Got a delet request')
})
1.3 错误处理中间件
app.use(function(err,req,res,next){
    console.error(err.stack)
    res.status(500).send('Something broke!')
})
1.4 内置中间件
  • express.static
  • express.json
  • express.urlencoded
1.5 第三方中间件

[]: http://expressjs.com/en/resources/middleweare.html

  • body-parser
  • compression
  • cookie-parser
  • morgan
  • response-time
  • serve-static
  • session
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值