专栏首页mySoulnode web模块 (服务器端和客户端)
原创

node web模块 (服务器端和客户端)

node web模块

web服务器

web服务器指网站服务器,指驻留在因特网上的某种程序,web浏览器的基本功能,提供信息浏览服务

web支持服务器端的脚本语言,通过脚本语言从数据库获取数据,将结果返回给客户端浏览器

web应用基本架构

Client => Server => Business => Data
Client 即客户端,通过http协议向服务器发起请求
Server 服务器端,指web服务器,接收客户端请求,并向客户端发送响应的数据
Business 即业务层,通过Web服务器处理应用程序,数据库的交互,逻辑运算,调用外部程序
Data 数据层,储存数据

使用Node创建Web服务器

使用http模块创建

需要使用substr()方法,一个从指定位置返回指定结束的方法,继承自String 最后一个参数可省 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/substr

// server.js
// 引入模块
var http = require('http');	// http模块
var fs = require('fs');		// fs 文件模块
var url = require('url');	// url 统一资源定位符模块

// 创建服务器
http.createServer((request, response) => {
	// 解析请求,保存进变量内
	var pathname = url.parse(request.url).pathname;

	// 输出请求的文件名
	console.log(pathname);

	// 从文件系统中读取文件,进行返回
	fs.readFile(pathname.substr(1), (err, data) => {	// 使用substr方法进行读取文件的字节,将文件名返回给回调函数
		if (err){	// 对错误进行处理
			console.log(err);	// 打印出错误
			// 返回一个404
			response.writeHead(404, {'Content-Type': 'text/html; charset=utf-8'});
			response.write("呀,什么都没有╮(╯_╰)╭");
			response.write('我猜你要的是 ' + data + ' ?');
			response.end();
		} else {
			// 返回 200
			response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
			// 返回文件内容
			response.write(data.toString());	// 将读取的文件内容进行字符串化,并进行输出
			response.end();	// 关闭连接,发出数据
		};
	});
}).listen(1937);
// index.html
<!doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<title>这是一个小Dome</title>
	</head>
	<body>
		<h1>hello word!</h1>
	</body>
</html>

访问 http://127.0.0.1:1937/index.html

出现hello word完成!

PS C:\Users\mingm\Desktop\test> node Server.js
/index.html
/
/input.html
/
{ [Error: ENOENT: no such file or directory, open 'C:\Users\mingm\Desktop\test\input.html']
  errno: -4058,
  code: 'ENOENT',
  syscall: 'open',
  path: 'C:\\Users\\mingm\\Desktop\\test\\input.html' }

改进一点

访问/出现404,说明没有设置首页,设置首页

	// 增加对首页的支持,设置默认首页为index.html
	if (pathname === '/') {
		pathname = pathname + 'index.html';
	}

完成后的文件如下

// 引入模块
var http = require('http');	// http模块
var fs = require('fs');		// fs 文件模块
var url = require('url');	// url 统一资源定位符模块

// 创建服务器
http.createServer((request, response) => {
	// 解析请求,保存进变量内
	var pathname = url.parse(request.url).pathname;

	// 输出请求的文件名
	console.log(pathname);

	// 增加对首页的支持,设置默认首页为index.html
	if (pathname === '/') {
		pathname = pathname + 'index.html';
	}

	// 从文件系统中读取文件,进行返回
	fs.readFile(pathname.substr(1), (err, data) => {	// 使用substr方法进行读取文件的字节,将文件名返回给回调函数
		if (err){	// 对错误进行处理
			console.log(err);	// 打印出错误
			// 返回一个404
			response.writeHead(404, {'Content-Type': 'text/html; charset=utf-8'});
			response.write("呀,什么都没有╮(╯_╰)╭");
			response.write('我猜你要的是&nbsp;' + data + '&nbsp;?');
			response.end();
		} else {
			// 返回 200
			response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
			// 返回文件内容
			response.write(data.toString());	// 将读取的文件内容进行字符串化,并进行输出
			response.end();	// 关闭连接,发出数据
		};
	});
}).listen(1937);

使用node创建客户端

PS C:\Users\mingm\Desktop\test> node get.js
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

PS C:\Users\mingm\Desktop\test>
var http = require('http');

// 请求的选项
var options = {	// 创建一个对象保存相关数据
	host:'www.iming.info',	// 主机地址
	port:'443',	// 访问端口
	method:'GET',
	path:'/',	// 访问的文件
};

// 处理响应的回调函数
var callback = (response) => {
	// 更新数据
	var body = '';
	response.on('data', (data) => {		// 绑定事件,data
		body += data;	
	});

	response.on('end', () => {	// 绑定end事件
		console.log(body);	
	});
};

// 开始发送请求
var req = http.request(options, callback);	// 发送请求,options为发送请求的选项,callback为处理请求的回调函数,将会有抛出三个事件一个data一个end,一个error,必须有end表示请求完毕,关闭连接
req.end();	// 关闭连接

由于小站使用的是nginx的https,使用了证书,需要使用验证秘钥的过程,所以拒绝访问,302没有权限

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 知新 | koa框架入门到熟练第二章

    [wp_editor_md_211ccaf408f127f491c28c16e945e4cd.jpg]

    mySoul
  • css3动画

    此为动画样式中的关键帧,用关键帧来控制css动画中的关键样式。相比较过渡更加的容易空值中间的部分

    mySoul
  • 解释SpringBoot之Ehcache 2.x缓存

    [wp_editor_md_a364d1423e3bdfc4066b7266a02a2393.jpg]

    mySoul
  • 使用sync-request和cheerio写爬虫

    node.js自带的http模块是异步获取网页内容的,不过我们可以到npm上去搜索同步的http模块。sync-request就是其中一种。

    ApacheCN_飞龙
  • 静态页面如何实现 include 引入公用代码

      一直以来,我司的前端都是用 php 的 include 函数来实现引入 header 、footer 这些公用代码的,就像下面这样: <!-- index....

    胡尐睿丶
  • 静态页面如何实现 include 引入公用代码

      一直以来,我司的前端都是用 php 的 include 函数来实现引入 header 、footer 这些公用代码的,就像下面这样:

    胡尐睿丶
  • 粘包现象

    让我们基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig)

    超蛋lhy
  • python数据分析系列(1)

      python数据分析主要处理的是结构化数据(structured data)例如:

    py3study
  • python使用post方式提交数据

    C:\Python27\python.exe D:/pythonworkspace/ZhiHu.py <!DOCTYPE html PUBLIC "-//W...

    py3study
  • 优秀文章 | 利用反射型XSS二次注入绕过CSP form-action限制

    CSP(Content-Security-Policy)是为了缓解XSS而存在的一种策略, 开发者可以设置一些规则来限制页面可以加载的内容.那文本中所说的for...

    用户1467662

扫码关注云+社区

领取腾讯云代金券