看这里--《Node入门》读书笔记

前言

js最早运行在浏览器==>浏览器提供js运行所需要的上下文
node.js允许js在后端运行(脱离浏览器)
node是一个运行时环境,是一个库

1. 一个完整的基于node的web应用

分析

  1. 我们要提供web页面,所以要一个HTTP服务器;
  2. 请求的url不同,相应不同,所以要路由分发;
  3. 请求的参数需要处理,所以要数据处理功能;
  4. 需要对请求处理,所以要请求处理程序;
  5. 需要响应客户端;

1.1node内置模块http–构建服务器

var http = require("http");
http.createServer(function(request, response) {
 response.writeHead(200, {"Content-Type": "text/plain"});
 response.write("Hello World");
 response.end();
}).listen(8888);

代码分析
上述代码可以拆解为:

var http = require("http");

var server = http.createServer(onRequest)
server.listen(8888);

function onRequest(request, response){
	response.writeHead(200, {"Content-Type": "text/plain"});
	response.write("Hello World");
	response.end();
}

http调用了createServer方法,它接收了一个函数onRequest作为参数。
记一笔:上述代码体现了:基于事件驱动的回调。
我也不太懂,先记着叭!

1.2对请求进行路由

整理思路
不同的请求进来的时候我们给出不同的响应,也就是说上面的代码中的

response.write("Hello World");

将这个"Hello World"替换成自己想要的。也就是:


response.write(html);

那么问题来了,怎么替换?也就是怎么获得不同的html文本:
不急,慢慢来

  1. 获取请求路径
  2. 根据路径分发请求
  3. 找到路径对应的内容
  4. 处理请求

获取请求路径
借助nodejs内置模块url

var url = require("url");
//我们得到的请求的路径
var pathname = url.parse(request.url).pathname;

根据请求路径分发请求
我们假定有这么一个专门分发路径的对象handle,它的一个属性名对应一个路径,在它的属性中找不到的属性名(路径)就返回404。
handle的一个属性对应一个函数(这个函数返回上面说的我们想要的html文本),这些函数我们在requestHandlers.js模块中暴露出来

//index.js中,这里的后缀名我喜欢加上,可以不加
const requestHandlers = require(./requestHandlers.js)

var handle = {}
//handle对象的'/'属性对应requestHandlers.js中的index函数,以此类推
handle["/"] = requestHandlers.index;
handle["/page1"] = requestHandlers.page1;
handle["/page2"] = requestHandlers.page2;

//这里的requestHandlers中的代码也简略的贴一点,都是重复的,贴一个例子
//requestHandlers.js中
function index(){
	return 'here is index page'
}
module.exports.index = index

找到路径对应的内容
这里的/page1、/page2就是请求的路径,然后不难得出我们想要的代码

handle[pathname] = requestHandlers.xxx //这里的xxx指代任意内容

也就是说我们需要执行器,将pathname和handle结合起来,并且返回一个html文本,或者说返回一个函数,让这个函数返回我们想要的内容,我们这里叫router叭
新建一个router.js

问题很简单了,

  • 在首页启动服务器的时候,传入两个参数,router和handle;
  • 启动服务器的时候拿到请求路径,交给路由;
  • 路由根据路径从handle对象中找到相应的函数。找到就执行,找不到就404

处理请求

//接受pathname  handle  返回html
let router = {
    route: (pathname, handle)=> {
    //我们前面说的一个路径(handle对象的一个属性)对应一个函数,判断一下,是函数就执行 ,不是函数(说明我们没有声明这个路径)就是404
        if (typeof handle[pathname] === 'function'){
            return handle[pathname]()
        }else {
            return '我丢!!!  404 not  found'
        }
    }
}
module.exports = router

未完待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值