04 Nodejs-构建Web服务器

构建Web服务器

一、HPPT信息

(1) 通用头信息(General

  1. Request URL 请求的URL,向服务器端获取的内容
  2. Request Method 请求的方法,GET或POST
  3. Status Code 响应的状态码
  4. Remote Address 请求服务器的IP地址和端口号

状态码 分类:

200系列 : 服务器成功响应
300系列 : 响应的重定向, 跳转另一个URL
400系列 : 客户端错误
500系列 : 服务器错误

(2) 响应头信息(Response Headers

  1. Connection 连接方式
  2. Content-Type 响应文件类型
  3. Transfer-Encoding 响应时的传输方式

(3) 请求头信息(Request Headers

  1. Accpet 客户端接受的文件类型汇总
  2. Connection 客户端和服务器端的连接方式
  3. User-Agent 客户端使用的浏览器

二、HTTP模块

可模拟浏览器向服务器端发送请求,也可创建Web服务器

(1) 模拟浏览器

const http = require('http');
http.get('http://www.baidu.com/index.html',(res)=>{
    //res:响应的对象
    console.log(res.statusCode);//打印状态码
    //获取服务器端响应的数据
    res.on('deat',(buf)=>{
    //on('data'(buf)=>{}):当有数据传递时触发函数,buf接收响应数据
    	consol.log(buf);    
    });
});

(2) 创建Web服务器

const http = require('http');
//创建web服务器
var server = http.createServer();
//分配端口,监听端口
server.listen(3000,()=>{
   console.log("Web服务器创建成功!"); 
});

server.on('request',(req,qes)=>{
    //request,请求信息
    //req,请求的对象
    //res,响应的对象
    console.log(req.url);
    //设置响应内容
    res.writeHead(302,{
     Location:'http://www.baidu.com'               
   });
    //响应结束
    res.end();
});

三、Express框架

Express框架是基于Nodejs来编写,用于构建Web服务器的

3.1 Express框架网址

3.2 路由

浏览器向Web服务器发送请求,Web服务器会根据请求的URL与请求的方法(GET、POST)来做出响应。

客户端登录与服务端响应案例

  • login.html
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <title>Login</title>
</head>
<body>
    <h2>登录</h2>
    <!--<form method="post" action="/login">-->
    <form method="get" action="/login"> 
    用户:<input type="text" name="user"></br>
    密码:<input type="text" name="paw"></br>
    <!-- 密码:<input type="password" name="paw"> -->
	 <input type="submit">
    </form>
</body>
</html>>

form表单 : 用于表单的提交来向服务器发送请求,配合tppe="submit"提交按钮使用
method属性 : 向服务器请求的方法(post / get)
action属性 : 向服务器请求的URL。如 /index.html
name属性 : 设置服务器端接受数据的名称

  • Server.js
const express = require('express');
const querystring = require('queryString');
var server = express();
//设置端口
server.listen(3000);
//使用get方法
server.get('/login',(req,res)=>{
    //响应页面文件
    res.sendFile(__dirname+'/index.html');//目录路径+文件名
});

/*使用post方法
server.post('/login',(req,res)=>{
	req.on('data',(buf)=>{
	var Str = buf.toString();
	var obj = querystring.parse(Str);
	});
    res.sendFile(__dirname+'/index.html');//目录路径+文件名
});
*/

/*使用路由传参方法
server.get('/login/:uid',(req,res)=>{//uid用于接受数据
	var obj = req.params();//将路由传进数据转为对象
    res.sendFile(__dirname+'/index.html');//目录路径+文件名
});
*/

req.method : 获取请求方法
req.url : 获取请求的URL
req.headers : 获取请求头信息
req.query : 获取请求式,用查询字符串传递数据,返回对象
req.params : 获取路由传递的数据,返回对象

res.send( ) : 发送文本,只能响应一次,若是数字则为状态码
res.sendFile( ) : 发送文件,需要以绝对路径__dirname+’/文件名称’
res.redirect( ) : 响应重定向

get请求 : 以查询字符串形式传递数据,服务器获取的结果为对象
post请求 : 通过表单提交方法传递数据,服务器端通过事件形式获取数据

3.3 路由器

路由在使用过程中,不同的模块可能出现相同的URL,这时把同一个模块下的所有路由挂载到特定的前缀。路由器是一种自定义模块(js文件),把同一个模块下的路由放在一起。

  • 商品模块与用户模块案列

商品模块(product):URL: /product/list

用户模块(user): URL: /user/list /user/password

  • Product.js
//商品路由器
const express = require('express');
//创建空路由器
var router = express.Router();
//将商品模块下的路由添加到路由器中
router.get('/list',(req,res)=>{
   res.send("商品list"); 
});
//导出路由器
module.exports = router;
  • User.js
//用户路由器
const express = require('express');
//创建空路由器
var router = express.Router();
//将商品模块下的路由添加到路由器中
router.get('/list',(req,res)=>{
   res.send("用户list"); 
});
router.get('/password',(req,res)=>{
   res.send("用户password"); 
});
//导出路由器
module.exports = router;
  • Server.js
const express = require('express');
//引入Product.js
const prodRouter = require('./Product.js');
const userRouter = require('./User.js');
var server = express();
server.listen(3000);
//将路由器挂载到product下
server.use('/product',proRouter);
//将路由器挂载到user下
server。use('/user',userRouter);

3.4 中间件

中间件的作用是为主要业务逻辑服务,每个中间件是一种函数。可分为应用级中间件,路由级中间件,内置中间件,第三方中间件,错误级中间件。

  1. 应用级中间件:每个中间件是一个函数,需要配合其他中间件或路由使用
  • 登录注册案例
const express = require('express');
var server = express();
server.listen(3000);
//验证-注册中间件
server.use('/reg',(req,res,next)=>{
    //next参数: 调用下一个中间件,或进入业务逻辑
    console.log('启动验证中间件');
    next();
});
//注册路由
server.get('/reg',(res,req,next)=>{
    res.send('注册成功!');
    next();
});
//登录路由
server.get('/login',(res,req)=>{
    res.send('登录成功!');
    next();
});
//登录-记录日志中间件
server.use('/login',(req,res)=>{
    console.log("记录日志");
});
  1. 内置中间件:资源文件托管指定目录,浏览器请求资源则在该目录下查找
  • 静态文件案例

  • public目录:包含login.html、reg.html

  • static.js

const express = require('express');
var server = express();
server.listen(3000);
//托管静态资源
server.use(express.static(./public));
/*
 * 在浏览器输入: http://127.0.0.1:3000/reg.html
 * 即可响应public目录下的reg.html文件
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值