封装Context.js模块|学习笔记

简介: 快速学习封装Context.js模块

开发者学堂课程【Node.js 入门与实战封装Context.js模块】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/588/detail/8302


封装Context.js模块


目录:

一、context.js文件建立

二、总结

 

一、context.js文件建立

1.context.js

模块化中扩展模块,重新建立一个新的 JS 文件,即 context.js 文件

该模块负责对 req 和 res 对象进行扩展

希望在该模块中做什么?

//1.为 req 增加一个 query 属性,该属性中保存的就是用户 get 请求提交过来的数据

-req.query

//2.为 req 增加一个 pathname 属性

-req.pathname

//3.为 res 增加一个 render 函数

Res.render= funtion(filename,telData) {

fs.readFile(fllename, function(err,data) {

if (err) {

res.writeHead(404,'Not Found',{'Content-Type':'text/html;charset=utf-8' });

res.end('4B4,not found.');

return;

}

//如果用户传递了模板数据,那么就使用 underscore 的 template 方法进行替换如果用户没有传递模板数据,那么就不进行替换

1f (tplData) {

//如果用户传递了模板数据,表示要进行模板替换

 var fn = _.template(data.toString('utf8'));

data = fn(tp1Data);

}

res.seHlate(data.toString('Content-Type',mime.getType(filename));

res.end(data);

});

};

Function aa(req, res) {

// body...

};

Var url = require(url);

//让当前模块对外暴露一个函数,通过这个函数将 index.js 中的 req 和 res 传递到当前 context.js 这个模块中

Module.exports = function (req,res) {

Var url0bj = url.parse(req.url.toLowerCase(),true)

//1.为 req 增加 query 属性

req·query=url0bj.query;

//2.为req增加pathname;

req·pathname=url0bj.pathname;

};

//3.为 res 增加一个 render 函数

res.render = function(filename,tplData)

2. Index.Js

在 index.js 中加载 context.js

1加載 http 模抉

var http = require('http');

var fs = require('fs');

var path = require('path');

var mime = require('mime');

var url = require('url');

var querystring = require('querystring');

var - = require('underscore');

Var context = require('./context.js');//在 index.js 中加载context.js,先声明一个变量 context,context 里面包含一个函数(req,res)

(2)创建服务

http.createServer(function(req, res) {

 要在这里写大量的代码

aa(req, res);

为 res 对象添加一个 render() 函数,方便后续使用

因为现在要追染的 index .html 中需要用到模板数据,所以给 render 函数增加了第二个参数

 第二个参数的作用就是用来传递 html 页面中要使用的模板数据

res.render = function(filename,tplData) {

fs.readFile(filename,function(err,data) {

if (err) {

res.writeHead(404, 'Not Found',{ 'Content-Type':'text/html;charset=utf-8' });

res.end('404,not found.') ;

return;

}

如果用户传递了模板数据,那么就使用 underscore 的 template 方法进行替换

如果用户没有传递模板数据,那么就不进行替换

if (tplData) {

如果用户传递了模板数据,表示要进行模板替换

var fn =_.template(data.toString('utf8'));

data = fn(tp1Data);

}

res.setHeader('Content-Type',mime.getType(filename));

res.end(date);

});

};

 

二、步骤总结

1.思考,该模块中要封装什么代码?

2.思考,这些代码有用到外部的数据吗?如果用到了,是否需要通过参数将这些数据传递到当前模块中

3.当前模块对外需要暴露的东西(module.exports的值)

相关文章
|
3月前
|
前端开发 数据安全/隐私保护
crypto-js中AES的加解密封装
文章介绍了如何在前端使用crypto-js库进行AES加密和解密,提供了加解密的函数封装示例,并演示了如何加密和解密字符串或对象。
305 1
crypto-js中AES的加解密封装
|
2月前
|
缓存 JSON JavaScript
Node.js模块系统
10月更文挑战第4天
43 2
|
3月前
|
JavaScript 前端开发 API
Vue学习笔记3:对比纯JavaScript和Vue实现数据更新的实时视图显示
Vue学习笔记3:对比纯JavaScript和Vue实现数据更新的实时视图显示
|
2月前
|
JavaScript 应用服务中间件 Apache
Node.js Web 模块
10月更文挑战第7天
33 0
|
2月前
|
JavaScript 网络协议
Node.js 工具模块
10月更文挑战第7天
21 0
|
3月前
|
设计模式 JavaScript
JS发布订阅模式封装(纯手工)
发布订阅模式是JS常用的设计模式,在面试中也会经常遇到,以下是我的手写实现方式,经测试效果不错,小伙伴们们可以直接拷贝使用。
|
2月前
|
JavaScript 前端开发
【干货分享】JavaScript学习笔记分享
【干货分享】JavaScript学习笔记分享
58 0
|
3月前
|
Web App开发 前端开发 JavaScript
HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)
HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)
|
2月前
|
JavaScript 前端开发 应用服务中间件
Node.js Web 模块
Node.js Web 模块
|
设计模式 JavaScript 前端开发