网站的组成
IP
域名
端口
端口是计算机与外界通讯交流的出口,就是一堆数字,用来区分服务器电脑中提供的不同的服务。
URL
统一资源定位符,又叫URL,是专门为标识Internet网上资源位置而设的一种编址方式。
平时说的网页地址就是URL
URL的组成
传输协议://服务器IP或域名:端口/资源所在位置标识
http://www.itcast.cn/new/wwww.html
http:超文本传输协议,提供了一种发布和接收HTML页面的方法。
开发过程中客户端和服务器端说明
在开发阶段中,客户端和服务器端使用同一台电脑,即开发人员电脑。
创建web服务器
//用于创建网站服务器的模块
const http = require('http');
//app对象就是网站服务器对象
const app = http.createServer();
//当客户端有请求来的时候
app.on('request', (req, res) => {
res.end('<h2>Hello user</h2>');
});
//需要监听一个端口
app.listen(3000);
console.log('网站服务器启动成功');
//本机调用方法
//http://localhost:3000/
nodemon
nodemon是一种工具,通过在检测到目录中的文件更改时自动重新启动节点应用于node.js的应用程序。
nodemon用于替换命令行中的node执行。
安装方法:
npm install -g nodemon
HTTP协议
HTTP协议的概念
客户端与服务器端沟通的规范。
超文本传输协议:规定了如何从网站服务器传输超文本到本地浏览器,它基于客户端服务器架构工作,是客户端(用户)和服务器端(网站)请求和应答的标准。
报文(客户端与服务器端两者对话的说明以及对话的内容)
在http请求和响应的过程中传递的数据块就叫报文,包括要传送的数据和一些附加信息,并且要遵守规定好的格式。
比如用户登录时,输入的用户名和密码。
下面就是一个报文信息:
请求报文
-
请求方式
GET 请求数据
POST 发送数据(登录时,用这个,更安全)
-
请求地址(Request URL)
响应报文
- HTTP状态码
- 内容类型
HTTP请求与响应处理
- 请求参数
客户端向服务器端发送请求时,有时需要携带一些客户信息,客户信息需要通过参数的形式传递到服务器端,比如登陆操作。 - GET 参数
10132901 - 10132904
//用于创建网站服务器的模块
const http = require('http');
//用于处理url地址
const url = require('url');
//app对象就是网站服务器对象
const app = http.createServer();
//当客户端有请求来的时候
app.on('request', (req, res) => {
//获取请求方式
//req.method
//获取请求地址
//req.ul
//req.header 获取请求报文信息
res.writeHead(200, {
'content-type':'text/html;charset=utf8',
'hello':'world'
});
console.log(req.url);
//1.要解析的url地址
//2.将查询参数解析成对象形式
let {query, pathname} = url.parse(req.url, true);
console.log(query.name);
console.log(query.age);
// console.log(req.method);
console.log(req.headers['accept']);
if (pathname == '/index' || pathname == '/') {
res.end('<h2>welcome to homepage</h2>');
} else if (pathname == '/list') {
res.end('welcome to listpage');
} else {
res.end('not found');
}
if (req.method == 'POST') {
res.end('post');
} else if (req.method == 'GET') {
res.end('get');
}
// res.end('<h2>Hello user</h2>');
});
//需要监听一个端口
app.listen(3000);
console.log('网站服务器启动成功');
//本机调用方法
//http://localhost:3000/
2. post请求参数
参数被放置在请求体中进行传输
get参数被放置在地址栏中进行传输
//用于创建网站服务器的模块
const http = require('http');
//app对象就是网站服务器对象
const app = http.createServer();
//处理请求参数模块
//把字符串转换成对象格式
const querystring = require('querystring');
//当客户端有请求来的时候
app.on('request', (req, res) => {
//post参数是通过事件的方式接收的
//data 当请求参数传递的时候触发data事件
//end 当参数传递完成的时候触发end事件
let postParams = '';
req.on('data', params=> {
postParams += params;
});
req.on('end', ()=> {
console.log(querystring.parse(postParams));
});
res.end('ok');
});
//需要监听一个端口
app.listen(3000);
console.log('网站服务器启动成功');
//本机调用方法
//http://localhost:3000/
响应
路由是指客户端请求地址与服务器端程序代码的对应关系。简单的说,就是请求什么响应什么。
//1.引入系统模块http
//创建网站服务器
//为网站服务器对象添加请求事件
//实现路由功能
// 获取客户端的请求方式
// 获取客户端的请求地址
const http = require('http');
const url = require('url');
const app = http.createServer();
app.on('requset', (req, res) => {
//获取请求方式,转换成小写
const method = req.method.toLowerCase();
//获取请求地址
//url.parse 将一个URL字符串里面的各项参数转换成对象并返回
const pathname = url.parse(req.url).pathname;
res.writeHead(200, {
'content-type' : 'text/html;charset=utf8'
});
if (method == 'get') {
if (pathname == '' || pathname=='/index') {
res.end('欢迎来到首页')
} else if (pathname == '/list') {
res.end('欢迎来到列表页')
} else {
res.end('您访问的页面不存在')
}
} else if (method == 'post') {
}
});
app.listen(3000);
console.log('服务器启动成功');
静态资源
客户端向服务器端请求响应的资源,服务器端不需要处理,可以直接响应给客户端的资源就是静态资源。例如CSS.JavaScript,image,HTML文件
动态资源
相同的请求地址不同的响应资源,这种资源就是动态资源
获取当期页面的绝对路径
__dirname
要拼接路径,用系统模块的join()方法.