Express是服务器的框架,更准确的说:它是一款基于node.js平的开发框架。官网:http://www.expressjs.com.cn/starter/installing.html
类似于它的框架很多,但它可以说是被广泛应用的第一款服务器开发框架。
express koajs loopback //以上是同一小组开发 不分好坏 根据项目适配 egg //阿里巴巴开发 基于koajs 国内应用比较广泛
安装方式分为两种:
1. npm install 在node.js平台安装 安装后系统自动生成package.json文件
2. 直接写package.json文件在进行npm install安装
使用方式:
//开启服务器 并见监听9000端口 const express = require('express'); let app = express(); //__dirname 打印当前文件路径-绝对路径 //同类型__filename 打印当前文件路径-绝对路径 包含文件名 app.use(express.static(__dirname + '/public')); app.listen(9000);
Express模块的get方法--路由 处理以get方式发送且路径为‘/’的请求
//当且仅当请求为get 方法 且路径符合时,才会触发相应的路由--也就是触发指定路径的指定方法 var express = require(); var app = express(); app.get('/',function(res,req){ res.send('Hello world!'); }); app.get('/customer',function(res,req){ res.send('customer pase'); }) app.get('/admin',function(){ res.send('admin page'); }); app.listen(3000);
为了页面更加整洁,可读性更高,我们会将处理路由的代码抽离出来:
目录结构:
routes/
index.js
app.js
routes/index.js function(app){ app.get('/',function(res,req){ req.send('hello world!'); }); app.get('/',function(res,req){ req.send('wo shi guile'); }); app.get('/',function(res,req){ req.send('wssjzw') }); } //app.js const express = require('express'); const routes = require('./routes'); let app = express(); routes(app); app.listen(9000);
运行原理
底层:http模块
Express框架建立在node.js内置的http模块上。
var http= require('http'); var app = http.createServer(function(request,response){ response.writeHead(200,{"content-type":"text/plain"}); response.end("Hello world!"); }); app.listen(3000,"localhost");
Express底层调用了http模块的createServer方法,表示生成一个HTTP服务器实例,该方法参数是一个回调函数,回调函数的两个参数分别代表HTTP请求的request对象和HTTP响应的response对象。
const express = require('express'); let app = express(); app.get('/',function(req,res){ res.send('Hello world!'); }); app.listen(3000);
这样书写相比于原生的好处是: 减少了代码耦合度(代码与代码的依赖度)。方便后续修改。
Express模块的get方法--路由 处理以post方式发送且路径为‘/’的请求
//对网站首页的访问返回 "Hello World!"字样 app.get('/',function(){ res.send('Hello World'); }); //网站首页接受POST请求 app.post('/',function(res,req){ res.send('Got a POST request'); });
利用Express托管静态文件
通过Express内置的Express.static可以方便地托管静态文件,例如图片、CSS、Javascript文件等。
将静态资源文件所在目录作为参数传递给express.static中间键就可以提供静态资源文件的访问。例如,假设在public目录放置了图片、CSS和Javascript文件,你就可以:
app.use(express.static('public'));
现在,public目录下面的文件就可以访问了。
http://localhost:3000/images/kitten.jpg http://localhost:3000/css/style.css http://localhost:3000/js/app.js http://localhost:3000/images/bg.png http://localhost:3000/hello.html
所有文件的路径都是相对存放目录的,因此,存放静态文件的目录名不会出现在URL中。
如果你的静态资源存放在多个目录下面,你可以多次调用express.static中间件:
app.use(express.static('public'));
app.use(express.static('files'));
访问静态资源文件时,express.static文件件会根据目录添加的顺序查找所需的文件。
如果你希望所通过express.static访问的文件都存放在一个‘虚拟(virtual)’目录(即目录根本不存在)下面,可以通过为静态资源目录指定一个挂载路径的方式来实现,如下所示:
app.use('/static',express.static('public'));
现在你就可以通过带有“/static”前缀的地址来访问public目录下面的文件了。
http://localhost:3000/static/images/kitten.jpg http://localhost:3000/static/css/style.css http://localhost:3000/static/js/app.js http://localhost:3000/static/images/bg.png http://localhost:3000/static/hello.html