express框架
Posted 52580587zl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了express框架相关的知识,希望对你有一定的参考价值。
express框架
express介绍:
Express 介绍Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。使用 Express 可以快速地搭建一个完整功能的网站。
中间件:封装好的函数(插件)
路由表:根据不同的请求,访问不同的接口。
Express 框架核心特性:
可以设置中间件来响应 HTTP 请求。定义了路由表用于执行不同的 HTTP 请求动作。可以通过向模板传递参数来动态渲染 html 页面。express不对node.js本身的特性进行二次抽象 而是在基本功能上进行扩充 express完全是由路由和中间件构成的框架从本质上来说一个express应用就是为了调用各种中间件
简单的说express可以很快速的让我们使用mvc的方式创建一个web应用(前后端可以分离,也可以不分离)
Express创建服务器
全局安装 npm i express -g
进入项目后,使用npm init -y 初始化项目
本地安装 npm i express -D
// 获取到了express 模块 const express = require(‘express‘); const { json } = require(‘express‘); // 创建一台服务器 const app = express(); // 端口 3000 // http 默认80 // https 默认443 app.listen(3000,function(){ console.log(‘启动成功了‘) })
使用步骤:
创建一个js文件,在文件中获取到express模块,
使用const 名称 = express()来创建一台服务器。
用 名称.listen(端口,function(){
Console.log(‘启动成功’)
})来监听运行的结果。
创建和监听中间可以添加请求
发起请求的例子:
app.get(‘/login‘,function(request,response){ // request 前端发起的请求 // response 后端的响应 response.send(‘login!‘) })
关于目录的问题:
只写个 / 说明在根路径(根目录)
写 /login 说明在login文件
response.send() 这个方法是返回一个文本,显示在页面上
response.json()返回一个json格式
npm脚本
在package.json文件中的scripts 里面增加一个配置
"scripts": { "test": "echo "Error: no test specified" && exit 1", "start":"node 文件名.js", "dev":"nodemon 文件名.js" }
我们在终端中输入npm start,可以执行node 文件名.js 从而启动项目。
终端中输入 npm run dev 可执行nodemon 文件名.js
除了start这个脚本命令配置可以直接 使用npm start,其他脚本命令都需要 使用npm run 命令。
中间件和路由
express完全是由路由和中间件构成的框架从本质上来说一个express应用就是为了调用各种中间件。
中间件本质就是一个函数,也可以叫插件,只不过express里面我们更习惯叫中间件。
挂载中间件 use(中间件监听的路径,中间件函数)
用 名称.use(path,fn),后面设置两个参数,请求的路径如果匹配到了路径,就会执行后面的函数。
第一个参数:路径,不传参数是全部,默认*也是全部
第二个函数是回调函数,如果匹配到路径就执行后面的函数。很多时候后面都是第三方封装好的一个函数,这个函数我们称之为中间件。
回调函数中是三个参数req res next
req就是请求,res是服务器的响应,next一旦调用,会把请求交给下一个中间件去处理,如果不调用next请求到这里就结束了,不会把请求传递给其他的中间件了,会一直停在调用next这个中间件的位置。
自定义中间件
在一个js文件中
// 自定义中间 function test(req,res,next){ console.log(‘这是自定义中间件‘) console.log(req.url,‘请求经过了test中间件‘); // 在中间件可以可以获取的前端请求的数据req // 如果不调用next() 那么后面的挂载的中间件就不会执行 next() } module.exports = test;
在调用express的文件中使用
// 加载模块 const test = require(‘./test‘) // 第一个参数为路径,只有包含这个路径的请求,才会经过这个中间件 app.use("/a",test)
路由中间件
路由:前端访问不同的地址,后端要返回不同的数据,这就叫后端路由
获取路由中间件
var router = express.Router() //内置中间件
处理get请求
router.get(监听请求的路径,处理回调函数)
处理post请求
router.post(监听请求的路径,处理回调函数)
导出时,module.export = router
get请求参数的获取
req.query 获取url中?后面的参数,并自动转为对象
post参数的获取
post请求参数的获取需要使用中间件express.urlencoded和req.body
express.urlencoded()//解析请求体和请求头,放在接口路由前面
get请求的另一种传参:在地址后面添加 :id
例:
router.get("/test/:id", function (req, res, next) { //获取get请求的url中的参数 // /users/test/12 //{ id: ‘12‘ } console.log(req.params) res.json({ code: 1 }); //返回json数据 });
请求 /users/test/12,得到结果{ id: ‘12‘ }
跨域访问接口
前端在开发中经常会被不能跨域访问所折磨,这次我们做后端,几句代码就可以支持跨域!(妈妈再也不用担心跨域报错了)
app.js中给所有的请求都设置响应头
//设置跨域访问 app.all("*", function (req, res, next) { //设置允许跨域的域名,*代表允许任意域名跨域 res.header("Access-Control-Allow-Origin", req.headers.origin || ‘*‘); //允许的header类型 res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With"); // //跨域允许的请求方式 res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); // 可以带cookies res.header("Access-Control-Allow-Credentials", true); if (req.method == ‘OPTIONS‘) { res.sendStatus(200); } else { next(); } })
静态资源托管中间件 express.static()
打开一个网站,我们可能访问的html中加载css,js,图片等文件,这些文件就叫静态资源。
我们网页中发起请求,请求接口返回的数据叫动态资源。 静态资源一般不需要做处理,直接就返回给浏览器 动态资源一般后端会处理,比如过解析前端的请求过来的url和参数,根据url和参数不同返回不同的json数据
使用express很容易就能创建一个静态资源服务器 express.static()
静态文件资源的路径
__dirname 当前文件夹的绝对路径
__filename 当前文件夹的绝对路径
所有请求过来的静态资源中间件内部都回去 public文件夹里查找,看看能不能找到这个文件,找到就返回文件,找不到,就交给剩下的路由去处理。
http://localhost:3000/imgs/1.gif //就是从 public文件夹里面找 imgs/1.gif
express脚手架创建项目(脚手架:应用的骨架)
express内置了很多中间件,我们一个一个配置比较麻烦,并且做一个后端项目,我们可以需要一些别的中间件,比如说日志插件,错误处理插件等等,需要考虑的比较多,这里我们借助于工具去创建一个通用的项目模板,就能省下这个配置过程。
通过如下命令安装
npm install express-generator -g
创建项目
express -e express-文件名
-e是指定了项目中使用的模板引擎
创建项目
express -e express-文件名
-e是指定了项目中使用的模板引擎
以上是关于express框架的主要内容,如果未能解决你的问题,请参考以下文章
Express4.10.2开发框架中默认app.js的代码注释