开发者学堂课程【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) {
i
f (er
r
)
{
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(fi
l
ename,tp
l
Data) {
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的值)