创建web服务器

```
//引用系统模块
const http = require('http');
//创建web服务器
//用于处理url地址
const url = require('url');
const app = http.createServer();
//当客户端发送请求的时候
app.on('request',(req,res)=>{
//写入响应状态码
res.writeHead(200,{
'content-type':'text/html;charset=utf8'
})
//获取请求报文信息
//req.headers
console.log(req.headers['accept'];
//1.要解析的url地址
//2.将查询参数解析成对象形式
var params = url.parse(req.url,true).query;
console.log(params.name);
console.log(params.age);
//获取请求地址
//req.url
if(req.url =='/index'|| req.url=='/'){
res.end('

welcome to homepage柠檬不酸

');
}else if(req.url == '/list'){
res.end('welcome to listpage');
}else{
res.end('not found');
}
//获取请求方式
//req.method
console.log(req.method)
if(req.method=="GET"){
res.end("GET")
}else if(req.method=="POST"){
res.end("POST")
}
//响应
//res.end('

hi,user

');
});
//监听3000端口
app.listen(3000);
console.log('服务器已启动,监听3000端口,请访问localhost:3000')
```

请求报文

1.请求方式(Request Method)

  • GET 请求数据
  • POST 发送数据

2.请求地址(Request URL)

```
app.on('request',(req,res){
req.headers //获取请求报文
req.url //获取请求地址
req.method //获取请求方法
})
```

响应报文

1.HTTP状态码

  • 200请求成功
  • 404请求的资源没有被找到
  • 500服务器端错误
  • 400客户端请求有语法错误

2.内容类型

  • text/plain
  • text/html
  • text/css
  • application/javascript
  • image/jpeg
  • application/json

HTTP请求与响应处理

1.请求参数

客户端向服务器端发送请求时,有时需要携带一些客户信息,客户信息需要通过请求参数的形式传递到服务器端,比如登录操作

GET请求参数

参数被放置在浏览其地址中,例如:http://localhost:3000/?name=zhangsan&age=20

```
//用于创建网站服务器的模块
const http = require('http');
//用于处理url地址
const url = require('url');
//app对象就是网站服务器对象
const app = http.createServer();
//当客户端有请求来的时候
app.on('request',(req,res)=>{

console.log(req.method)
//1.要解析的url地址
//2.将查询参数解析成对象形式
let {query,pathname}= url.parse(req.url,true);
console.log(query.name);
console.log(query.age);
//写入响应状态码
res.writeHead(200,{
'content-type':'text/html;charset=utf8'
})
if(pathname =='/index' ||pathname=='/'){
res.end('<h2>欢迎来到首页</h2>');
}else if(pathname == '/list'){
res.end('welcome to listpage');
}else{
res.end('not found');
}
if(req.method=="GET"){
res.end("GET")
}else if(req.method=="POST"){
res.end("POST")
}

});

app.listen(3000);

console.log('网站服务器启动成功');

<h4>POST请求参数</h4>

1.参数被放置在请求体中进行传输

2.获取POST参数需要使用data事件和end事件

3.使用querystring系统模块将参数转换为对象格式

//用于创建网站服务器的模块

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))
let params = querystring.parse(postParams);
console.log(params.uname)
console.log(params.password)
})

res.end('ok');

});

app.listen(3000);

console.log('网站服务器启动成功');

06-Node.js学习笔记-创建web服务器的更多相关文章

  1. 06 Node.js学习笔记之自动路由

    在以往客户端请求的文件,我们都得判断匹配才能返回相应的数据,其实我们可以设置一个自动路由,就可以不用每次去判断用户访问的是那个文件了 //1.载入http和fs模块 var http=require( ...

  2. Node.js学习笔记——Node.js开发Web后台服务

    一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

  3. Node.js学习笔记(2):基本模块

    Node.js学习笔记(2):基本模块 模块 引入模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在No ...

  4. Fenix – 基于 Node.js 的桌面静态 Web 服务器

    Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...

  5. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  6. Node.js学习笔记(1):Node.js快速开始

    Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...

  7. Node.js学习笔记(3):NPM简明教程

    Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...

  8. 系列文章--Node.js学习笔记系列

    Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...

  9. Node.js学习笔记(4):Yarn简明教程

    Node.js学习笔记(4):Yarn简明教程. 引入Yarn NPM是常用的包管理工具,现在我们引入是新一代的包管理工具Yarn.其具有快速.安全.可靠的特点. 安装方式 使用npm工具安装yarn ...

随机推荐

  1. CSU OJ1960

    有一棵由N个结点构成的树,每一条边上都有其对应的权值.现在给定起点,求从该点出发的一条路径(至少有一条边)使得这条路径上的权值之和最大,并输出这个最大值. Input 第一行一个正整数T,代表数据组数 ...

  2. 洛谷 题解 P1604 【B进制星球】

    题目:P1604 B进制星球 本人提交记录:R6292872 作为一个极其无聊的人,我没事干地写了operator... 思路很简单: 读入b 读入b进制的x,y ans = x + y 输出ans ...

  3. 统计学习方法与Python实现(二)——k近邻法

    统计学习方法与Python实现(二)——k近邻法 iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 1.定义 k近邻法假设给定一个训练数据集,其中的实例类别已定 ...

  4. 用.NET模拟天体运动

    用.NET模拟天体运动 这将是一篇罕见而偏极客的文章. 我上大学时就见过一些模拟太阳系等天体运动的软件和网站,觉得非常酷炫,比如这个(http://www.astronoo.com/en/articl ...

  5. 【玩转SpringBoot】配置文件yml的正确打开姿势

    序言 在很久以前,Spring的配置文件是基于XML的.它的名字就是applicationContext.xml,没错,就只有这一个xml文件. 它里面配置了所有的东西.但是数据库信息通常会单独拿出来 ...

  6. 小白学 Python 爬虫(21):解析库 Beautiful Soup(上)

    小白学 Python 爬虫(21):解析库 Beautiful Soup(上) 人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前 ...

  7. 深入理解Kafka必知必会(3)

    Kafka中的事务是怎么实现的? Kafka中的事务可以使应用程序将消费消息.生产消息.提交消费位移当作原子操作来处理,同时成功或失败,即使该生产或消费会跨多个分区. 生产者必须提供唯一的transa ...

  8. LINUX网络传输的序列化和反序列化C++

    来到公司实习,开始面向实习生有一个小项目,当然了,服务器就由我一个人来写了,1.0主要完成的使用纯C 写Linux下UDP的服务器框架,大部分还都是以前在学校做过的项目套用的,难度不大,经过跟大bos ...

  9. Nginx入门教程-简介、安装、反向代理、负载均衡、动静分离使用实例

    场景 Nginx入门简介和反向代理.负载均衡.动静分离理解 https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102790862 Ub ...

  10. github pages 子域名 ( subdomain ) https 认证

    目录 说明 github pages 上的创建子域名 https 认证 说明 转载请注明出处https://www.cnblogs.com/bllovetx/p/12013462.html 欢迎访问我 ...