创建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. 摄像头CMOS和CCD的比较

    转载自网络,在此做一下总结,仅供参考: 1.CCD每曝光一次,在快门关闭后进行像素转移处理,将每一行中每一个像素(pixel)的电荷信号依序传入“缓冲器”中,由底端的线路引导输出至 CCD 旁的放大器 ...

  2. 如何成为一名成功的iOS程序员,挑战年薪50万?

    编程是一个仅靠兴趣仍不足以抵达成功彼岸的领域.你必须充满激情,并且持之以恒地不断汲取更多有关编程的知识.只是对编程感兴趣还不足以功成名就——众所周知,我们工作起来像疯子. 编程是一个没有极限的职业,所 ...

  3. Day 04 作业

    目录 作业 简述Python的五大数据类型的作用.定义方式.使用方法: 数字类型 字符串类型 列表 字典 布尔型 一行代码实现下述代码实现的功能: 写出两种交换x.y值的方式: 一行代码取出nick的 ...

  4. java_计算个人所得税

    // import java.util.Scanner;public class Test10{ public static void main(String[] args){ // 创建Scanne ...

  5. 【ES5 ES6】使用学习

    [ES5 ES6]使用学习 转载: ============================================================= 1.Promise 2.下划线转驼峰,驼 ...

  6. 【JPA】开始

    Java SE中使用 实体Bean package cn.ycx.entity; import javax.persistence.Entity; import javax.persistence.I ...

  7. ORACLE存储过程详解

    1.定义 所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给 ...

  8. 花生日记_花生日记APP下载_花生日记官方网站

    花生日记 国内领先的社交电商导购分享平台. 独创社交电商3+模式,社交+电商+社群,上线1个月注册用户超百万.合作商家涵括各个类目以及平台.为数万宝妈提供月收入3000以上兼职收入. 微信扫描下方二维 ...

  9. Git打包指定分支所提交的文件

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/da7e233a-c ...

  10. idea上传项目到github

    1.在上传项目之前需要先在idea中确认两个配置,一个是git的执行位置,电脑上没有安装git的需要提前安装(下载git软件并且安装,非github desktop),安装之后再idea的settin ...