express框架应用

来源:互联网 发布:java poi 下载excel 编辑:程序博客网 时间:2024/06/05 20:47
一. 概述
Express是基于Node.js的Web开发框架。
实例:
//根目录下新建启动文件index.jsvar express = require('express');var app = express();//浏览器请求文件定位到public子目录app.use(express.static(__dirname + '/public'));//app.get方法用于指定不同的访问路径所对应的回调函数即“路由”app.get('/', function (req, res) {res.send('Hello world!');});app.get('/customer', function(req, res){res.send('customer page');});app.listen(8080);
二.运行原理
Express框架建立在node.js内置的http模块上,其等于在http模块之上,加了一个中间层。
1.中间层(middleware)
中间件就是处理HTTP请求的函数,在一个中间件处理完后,再传递给下一个中间件。
每个中间件可以从App实例接收三个参数即request对象(代表HTTP请求)、response对象(代表HTTP回应),next回调函数(代表下一个中间件)。
每个中间件都可以对HTTP请求(request对象)进行加工,并且决定是否调用next方法,将request对象再传给下一个中间件。
2. use方法
use是express注册中间件的方法,它返回一个函数。
var express = require("express");var http = require("http");var app = express();app.use(function(request, response, next) {console.log("In comes a " + request.method + " to " + request.url);next();});//use方法内部可以对访问路径进行判断实现简单的路由app.use(function(request, response, next) {if (request.url == "/about") {response.writeHead(200, { "Content-Type": "text/plain" });} else {next();}});//use方法也允许将请求网址写在第一个参数app.use('/path', someMiddleware);http.createServer(app).listen(1337);
3. Express方法
(1) all方法和HTTP动词方法
针对不同的请求,Express提供了use方法的一些别名。
var express = require("express");var http = require("http");var app = express();//“*”表示对所有路径有效,所有请求都必须通过该中间件app.all("*", function(request, response, next) {response.writeHead(200, { "Content-Type": "text/plain" });next();});//get方法是只有GET动词的HTTP请求通过该中间件,Express还提供post、put、delete方法,即HTTP动词都是Express的方法。app.get("/about", function(request, response) {response.end("Welcome to the about page!");});//Express允许模式匹配,如匹配“/hello/alice”网址,其中的alice将被捕获,作为req.params.who属性的值app.get("/hello/:who", function(req, res) {res.end("Hello, " + req.params.who + ".");});//若在模式参数后面加上问号,表示该参数可选app.get('/hello/:who?',function(req,res) {if(req.params.id) {res.end("Hello, " + req.params.who + ".");}else {res.send("Hello, Guest.");}});app.get("*", function(request, response) {response.end("404!");});http.createServer(app).listen(1337);
(2)set方法
set方法用于指定变量的值。
app.set("views", __dirname + "/views");app.set("view engine", "jade");
4. response对象
(1)response.redirect方法允许网址的重定向。
     response.redirect("http://www.example.com");
     response.redirect(301, "http://www.example.com");
(2)response.sendFile方法用于发送文件。
     response.sendFile("/path/to/anime.mp4");
(3)response.render方法用于渲染网页模板。
app.get("/", function(request, response) {            response.render("index", { message: "Hello World" });     });
使用render方法,将message变量传入index模板,渲染成HTML网页。
5. request对象
(1)request.ip属性用于获得HTTP请求的IP地址。
(2)request.files用于获取上传的文件。
四. 开发实例
1. 编写启动脚本
项目根目录下新建app.js,如下:
var express = require('express');var app = express();// 设定port变量,意为访问端口app.set('port', process.env.PORT || 3000);// 设定views变量,意为视图存放的目录app.set('views', path.join(__dirname, 'views'));// 设定view engine变量,意为网页模板引擎app.set('view engine', 'jade');app.use(express.favicon());app.use(express.logger('dev'));app.use(express.bodyParser());app.use(express.methodOverride());app.use(app.router);app.use(express.static(path.join(__dirname, 'public')));//指定根路径app.get('/', function(req, res) {res.send('Hello World');});//发送静态网页模板app.get('/about', function(req, res) {res.sendfile('./views/about.html');});app.listen(app.get('port'));
2. 动态网页模板
Express支持多种模板引擎,如采用ejs模板引擎。
安装完模板引擎后,改写app.js:
var express = require('express');var app = express();// 加载ejs模块var ejs = require('ejs');var js = (args.length > 1 ? args[1] : '') + '/js/';var style = args.length === 2 ? args[1] : (args.length === 1 ? args[0] : 'default');app.set('port', process.env.PORT || 8080);app.set('views', __dirname);// 指定模板文件的后缀名为htmlapp.set('view engine', 'html');// 运行ejs模块app.engine('.html', ejs.__express);app.set('view engine', 'html');app.use(express.favicon());app.use(express.logger('dev'));app.use(express.bodyParser());app.use(express.methodOverride());app.use(express.cookieParser());//render方法的参数就是模板的文件名,默认放在子目录views之中,第二个参数表示模板变量绑定的数据。app.get('/index', function(req, res) {res.render('index', {title: '首页',style: style,css: style + '/css/index.css',js: js + 'index.js'});});app.listen(app.get('port'));
其中index.html文件内容为:
<!DOCTYPE html><html lang="en" ng-app="app"><head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /><meta http-equiv="Content-type" content="text/html; charset=utf-8" /><meta name="format-detection" content="telephone=no" /><meta name="format-detection" content="email=no" /><title><%= title %></title><link href="/dist/<%= css %>" rel="stylesheet" /><script>(function() {window.env = 'dev';window.basePath = '';window.staticPath = '<%= style %>';window.restPath = '';})();</script></head><body class="root" ng-controller="gRoot"><div class="g-page" ui-view id="wrap"></div><script src="/dist<%= js %>"></script></body></html>
五. Express.Router用法
1.基本用法
(1)Express.Router是一个构造函数,调用后返回一个路由器实例。
(2)使用该实例的HTTP动词方法,为不同的访问路径,指定回调函数;
(3)将路由挂载到某个路径。
如挂载到根路径下的路由实例:
var router = express.Router();router.get('/', function(req, res) {res.send('首页');});router.get('/about', function(req, res) {res.send('关于');});//相当于为/app和/app/about这两个路径,指定了回调函数。app.use('/app', router);
2.router.route方法
router实例对象的route方法,可以接受访问路径作为参数。
router.route('/api').post(function(req, res) {// ...}).get(function(req, res) {Bear.find(function(err, bears) {if (err) res.send(err);res.json(bears);});});
3. router中间件
use方法为router对象指定中间件,即在数据正式发给用户之前,对数据进行处理。
router.use(function(req, res, next) {console.log(req.method, req.url);next();});
4.对路径参数的处理
router对象的param方法用于路径参数的处理:
router.param('name', function(req, res, next, name) {// 对name进行验证或其他处理……console.log(name);req.name = name;next();});//param方法必须放在HTTP动词方法之前。router.get('/hello/:name', function(req, res) {res.send('hello ' + req.name + '!');});
参考:http://javascript.ruanyifeng.com/nodejs/express.html
          http://www.expressjs.com.cn/
原创粉丝点击