如下介绍来自官网:javascript
定义如何处理浏览器的请求html
var express = require('express') var app = express() // respond with "hello world" when a GET request is made to the homepage app.get('/', function (req, res) { res.send('hello world') })
Express是一个路由和中间件Web框架,其自身的功能不多,Express应用程序本质上是一系列中间件函数调用。
中间件的功能是能够访问请求对象(req
),响应对象(res
)和应用程序的请求-响应周期中的下一个中间件功能的功能。下一个中间件功能一般由名为的变量表示next
。
中间件功能能够执行如下任务:java
若是当前的中间件功能没有结束请求-响应周期,则必须调用next()
将控制权传递给下一个中间件功能。不然,该请求将被挂起。node
Express可使用如下类型的中间件:express
express.Router()
。next
对象,也必须指定它以维护签名。不然,next
对象将被解释为常规中间件,而且将没法处理错误。)在运行期间,模板引擎将静态模板中的变量替换为运行期间产生的真实数据,并转换为html文件返回给客户端,这样使html的设计更加简单。
与Express配合使用的一些流行模板引擎是Pug,Mustache和EJS。Express默认使用Jade。npm
Express带有默认的错误处理程序,不须要任何额外的工做。若是同步代码引起错误,则Express将捕获并处理该错误。例如:json
app.get('/', function (req, res) { throw new Error('BROKEN') // Express will catch this on its own. })
在上一个章节中,分析了原生js书写一个简单的node服务器,很是的复杂麻烦。
使用express框架快速的构建一个上章节的Node服务。segmentfault
<form action="http://localhost:8080/api" method="post" enctype="multipart/form-data"> 用户:<input type="text" name="user"><br> 密码:<input type="password" name="pwd"><br> <input type="file" name="file" multiple><br> <input type="submit" value="提交"> </form>
使用express内置中间件static,以下请求静态资源的时候express会从www寻找并返回api
server.use(express.static('./www'));
安装body-parser
浏览器
npm i body-parser -D
引入body-parser
插件,response的请求头中会自动新增body变量将body解析。
const body = require('body-parser'); //接收除文件外的body server.use(body.urlencoded({extended: false}));
安装multer
npm i multer -D
引入multer
插件,设置上传路径为./upload
,文件自动上传到upload目录,response的请求头中会新增files
变量存储相关信息。
const multer = require('multer'); // 接收文件body let multerObj = multer({dest: './upload'}); server.use(multerObj.any());
const express = require('express'); const body = require('body-parser'); //接收除文件外的body const multer = require('multer'); // 接收文件body let server = express(); server.listen(8080); // 中间件,用use吧服务加到中间件上,每一个中间件加的方式看官网定义 server.use(body.urlencoded({extended: false})); let multerObj = multer({dest: './upload'}); server.use(multerObj.any()); // 处理请求 server.get('/', (req, res) => { res.send('OK'); }); server.post('/api', (req, res) => { res.send('OK'); // 原生和express都没有req.body,是中间件加上的body console.log(req.body); console.log(req.files); }); // static,意思是请求静态资源的时候express会处理 server.use(express.static('./www'));
req.body
就正确解析,req.files
里面包含了上传的文件信息,而且已经作好了文件名哈希。