一、网络服务器

1、http状态码

1xx: 表示普通请求,没有特殊含义

2xx:请求成功

  • 200:请求成功

3xx:表示重定向

  • 301 永久重定向
  • 302 临时重定向
  • 303 使用缓存(服务器没有更新过)

4xx:无法访问

  • 403:无法访问
  • 404:资源找不到

5xx:服务器有错

  • 500:服务器代码有错
  • 502:网关或代理服务器出错
  • 503:服务器已崩溃

状态码使用

res.writeHead('状态码','响应头对象')

2、响应头

响应头:

  • Content-Type:响应的文件类型(MIME类型)

    • 注意:未指定响应文件内容是,默认是html;编码格式默认是系统编码
  • Content-Length: 响应内容的长度 (数字)
  • Access-Control-Allow-Oragin:"*" //设置跨域

设置响应头

{
'Content-Type':'text/html;charset=utf-8'
}

3、MIME类型:

什么是MIME类型?

  • Multipurpose Internet Mail Extensions多用途互联网邮件扩展类型
  • 可以认为是文件类型的表述

常用的MIME类型有哪些?

  • .txt-------------text/plain
  • .html-------------text/html
  • .css-------------text/css
  • .js-------------text/javascript
  • .png-------------image/png
  • .jpg-------------image/jpeg
  • .gif-------------image/gif
  • .json-------------text/json 以前 application/json
  • .xml-------------text/xml
  • .pdf-------------application/pdf
  • .zip-------------application/x-gzif
  • .mp3-------------audio/mpeg
  • .mp4-------------video/mpeg

4、制作静态网页服务器

使用nodeJS搭建一个最基本的服务器

var http = require('http');
var path = require('path');
var server = http.creareServer();
server.on('request',function(req,res){
//配置访问不同的url
if(req.url==='/'){
//根据请求文件的后缀通过path模块得到,可以设置不同的MIME类型
res.writeHead(200,{
"content-Type":"text/html;charset=utf-8;"
})
res.write('<h1>响应内容<h2>')
res.end();
}
})
server.listen(80,function(){
console.log('server is running.....');
})

5、接收get和post方式的传值

get方式客户端同过url传值

  • nodeJS接收使用req.url取值

post方式客户端通过表单传值

  • nodeJS接收使用获取流的方式取值
req.on('data',(a)=>{
//定义传过来的数据
let query ='';
query+=a;
})
req.on('end',()=>{
//完成
res.write('<h1>传递的参数为:'+query+'</h1>');
res.end();
})

二、express框架

1、express介绍

express是一个基于node.js 的极简、灵活的web应用开发框架,可以实现强大的web服务器功能

Express 框架核心特性:

  • 可以设置中间件响应或过滤http请求
  • 可以使用路由实现动态网页,响应不同的http请求
  • 内置支持ejs模板(默认是jade模板),实现模板渲染生成html

express-generator生成器

  • 是express官方团队为开发者准备的一个快速生成工具,可以快速的生成一个基本的express开发

2、express安装

安装express-generator生成器

  • cnpm i -g express-generator //安装完成后可以使用express命令
  • express -e 项目名称 //创建项目 (e表示使用ejs模板)
  • express -e //手动创建项目
  • cnpm i //安装依赖
  • 启动项目
    • node app //需要手动添加监听端口的代码
    • npm start //自动查找node ./bin/www
    • node ./bin/www //开启项目
  • localhost:3000 //测试项目

安装nodemon插件

由于项目每次修改内容,需要重新启动项目,非常麻烦,借助第三方模块实现不用重启也能自动更新的效果

  • npm i -g nodemon //安装到全局
  • npm i -D nodemon //安装到当前项目
  • 使用:把node 替换为 nodemon 执行js文件

目录说明

  • bin 可执行文件目录
  • node_modules 依赖包目录
  • public 静态文件根目录
    • 所有金泰文件都放在这个目录下html,css,js,图片,字体,视屏等资源
  • routes 路由模块目录,动态文件的目录
    • 优先找静态文件,如果没有静态存在则找动态路由,如果没有,就404(根据app.js中间件条用顺序而来)
  • views 视图目录,用来存放所有ejs模板

文件

  • app.js 项目的主文件,对整个项目的所有资源进行统筹的安排
  • package.json 项目的描述文件,声明项目名称,版本,依赖等

3、express路由(重要)

  • 接收用户请求,处理用户数据,返回结果给用户的一套程序,可以理解为生成动态网页的程序
  • 后端路由的核心:URL

express的路由

express对象自带有一个Router类,可以实例化出路由对象,可以在改对象上挂载非常多的路由节点,写法如下:

创建一个独立的路由模块

  • 需求:创建一个vip路由模块,接收vip目录下的所有需求,响应数据

    • 1)在routes目录下创建一个vip.js的路由模块
    • 2)编写路由模块代码
    var express = require('express'); //引入express模块
    var router = express.Router();//实例化路由对象 //编写路由挂在到路由对象上
    router.get('/list.html',function(req,res){
    res.send('数据');
    }) module.exports = router; //暴露路由对象
    • 3)将编写好的路由模块引入到主模块app.js中,由主模块分配对应的请求到该模块去处理
    var vip = require("./routes/vip.js");//引入vip路由模块
    app.use("/vip",vip);//分配vip目录下的请求给vip路由去处理

路由的区分

  • 大路由(总路由):app.js 负责接所有请求,对请求进行分配
  • 小路由(分路由):/routes下面的所有路由模块,只负责处理自己管理的目录下的请求

4、express响应对象(res)

  • 响应对象是服务器向客户端响应数据的对象,包含了所有要响应的内容

响应对象的方法

  • res.send();//【重点】返回任意类型的数据给客户端,有以下注意事项:

    • 如果返回一个数字,会当成是状态码,会报错
    • send方法只能出现一次,重复无效,并且会报错
  • 设置状态码并返回内容,支持链式调用
res.status(200).send('任意内容')
  • res.json(); //返回JSON数据,自动设置响应头
  • res.render(); //【重点】模板渲染,自动拼接数据,发给浏览器
res.render('模板名称','模板数据')
  • res.redirect('目标');重定向,可以实现跳转
  • res.set(); //【重点】设置响应头

5、express请求对象(req)

客户端向服务端发送数据的对象,包含请求头和请求体

接收get方式的传值

  • 语法:req.query.参数名

接收post方式的传值

  • 语法:req.body.参数名

匹配URL网址上的数据(匹配模式)

  • 在接请求的地方去匹配,在通过语法进行接收,实现伪静态
  • 语法:req.params.参数名

6、中间件

什么是中间件?

是一个函数,位于客户端和路由之间,可以访问请求对象和响应对象,也可以调起下一个中间件

自定义中间件

app.use(function(request, response, next) {
// 对request和response作出相应操作
// 操作完毕后返回next()即可转入下個中间件
next();
})

伪函数 next()

  • 如果中间件不调用next()函数,整个请求响应流程中止,不在向后执行
  • 调用函数相当于调用下一个中间件,执行完以后自己的函数继续执行

最新文章

  1. caroufredsel 参数
  2. 学习Java,还需要学好哪些知识
  3. 初探linux内核编程,参数传递以及模块间函数调用
  4. K-D Tree
  5. Oracle10g RAC的简单操作
  6. Struts1的核心对象
  7. Xcode解决代码高亮、语法提示、错误警告等功能失效的解决方法
  8. iOS 中的frame,bounds,center,transform关联
  9. electronic data interchange 电子数据交换
  10. Basic Vlan Configure
  11. CSS基础深入之细说盒子模型
  12. 询url包括字符串参数(js高度注意事项)
  13. snmpwalk高延时问题分析
  14. jQuery 鼠标滚轮插件 jquery.mousewheel.js
  15. 解决UIViewController中添加子控制器viewWillAppear不调用问题
  16. mysql数据类型优化
  17. [转载]Fiddler为所欲为第四篇 直播源抓取与接口分析 [四]
  18. 新巴巴运动网上商城 项目 快速搭建 教程 The new babar sports online mall project quickly builds a tutorial
  19. mysql主从配置,读写分离
  20. Hadoop MapReduce执行过程实例分析

热门文章

  1. mybatis三个执行器的差别
  2. docker jenkins 插件安装提速
  3. MySQL函数find_in_set介绍
  4. Java基础 awt Graphics2D 生成矩形图片并向其中画一条直线
  5. 工具推荐--Mac下画图软件:Omnigraffle
  6. C# INI配置文件读写类
  7. requests库学习案例
  8. java js ur特殊格式处理 json 特殊格式处理
  9. Redis面试大全
  10. ETF计算公司:现金差额