Web应用
Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。
API
丰富的 HTTP 快捷方法和任意排列组合的 Connect 中间件,让你创建健壮、友好的 API 变得既快速又简单。
性能
Express 不对 Node.js 已有的特性进行二次抽象,我们只是在它之上扩展了 Web 应用所需的基本功能。
总结
项目中使用express
首先电脑中需要安装Node.js,然后为应用创建一个目录,当作工作目录。
mkdir express_project
cd express_project
为应用创建一个package.json文件,此文件描写了应用的基本简介和需要安装的依赖。使用npm init
命令创建。
接下来安装express到项目以来中去npm install express --save
在package.json文件中已经指定了入口文件app.js或者index.js,创建入口文件。
const express = require('express');
const app = express();
app.get('/', function(req, res) {
res.send('Hello World!');
};
const server = app.listen(3000, function() {
const host = server.address().address;
const port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
运行node app.js
便可以启动服务。
Express应用生成器
使用Express应用生成器可以快速创建一个应用骨架。首先在电脑全局安装npm install express-generator -g
,然后就可以快速创建一个应用的骨架express 项目文件名
。例如,创建一个名为myapp的项目,步骤如下:
express myapp
进入项目 cd myapp
安装依赖 npm install
启动项目 npm start
最后打开浏览器http://localhost:3000/ 就可以看到这个项目启动了
Express路由
路由的结构为:app.METHOD(PATH, HANDLER)。METHOD为HTTP请求的方式,比如,get, post, put, delete等方式;PATH是服务器端的路径;HANDLER是当路由匹配到时执行的处理函数。每一个路由都可以有一个或者多个处理器函数,当匹配到路由时,这个/些函数将被执行。
app.post('/edit', function(req, res) {
console.log(req.body);
res.send('Got a post request');
});
利用Express托管静态文件
Express内置的express.static
可以方便的托管静态文件,例如图片,CSS,JS文件等。将静态资源文件所在的目录作为参数传递给 express.static 中间件就可以提供静态资源文件的访问了。例如,假设在 public 目录放置了图片、CSS 和 JavaScript 文件,就可以通过app.use(express.static('public'))
,这样就可以使用http://localhost:3000/images/pig.jpg访问到图片。
如果静态资源存放在多个文件夹下,那么可以多次调用该方法:
app.use(express.static('public'));
app.use(express.static('all'));
如果你希望所有通过 express.static 访问的文件都存放在一个“虚拟(virtual)”目录(即目录根本不存在)下面,可以通过为静态资源目录指定一个挂载路径的方式来实现,如下所示:
app.use('/static', express.static('public'));
这样访问上面的图片地址就变为http://localhost:3000/static/images/pig.jpg
异常处理
设置一个错误处理器
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});
404处理器,错误处理器中间件并不捕捉404
app.use(function(req, res, next) {
res.status(404).send('Sorry cant find that!');
});