Express 菜鸟笔记
基于 Node.js
平台,快速、开放、极简的 Web
开发框架。
使用 Express
可以快速地搭建一个完整功能的网站。
Express
框架核心特性:
- 可以设置中间件来响应
HTTP
请求 - 定义了路由表用于执行不同的
HTTP
请求动作 - 可以通过向模板传递参数来动态渲染
HTML
页面
安装
mkdir myapp
cd myapp
npm init
npm install express -save // save to package.json
生成器
npm install express-generator -g
express myapp
cd myapp
npm install
set DEBUG=myapp
npm start
极简示例
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.send('hello world!');
});
app.listen(3000);
路由
路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等)组成的
路由的定义由如下结构组成:app.METHOD(PATH, HANDLER)
app.METHOD(path, [callback…], callback)
app.post('/', function (req, res) {
res.send('Got a POST request');
});
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user');
});
app.all('/secret', function (req, res, next) {
console.log('Accessing the secret section ...');
next(); // pass control to the next handler
});
多个回调函数处理路由
app.get('/example/b', function (req, res, next) {
console.log('response will be sent by the next function ...');
next();
}, function (req, res) {
res.send('Hello from B!');
});
回调函数组处理路由
app.get('/example/c', [cb0, cb1, cb2]);
使用 app.route() 定义链式路由句柄
app.route('/book')
.get(function(req, res) {
res.send('Get a random book');
})
.post(function(req, res) {
res.send('Add a book');
})
.put(function(req, res) {
res.send('Update the book');
});
调用 next(‘route’) 方法将控制权交给下一个路由
// 一个中间件栈,处理指向 /user/:id 的 GET 请求
app.get('/user/:id', function (req, res, next) {
// 如果 user id 为 0, 跳到下一个路由
if (req.params.id == 0) next('route');
// 否则将控制权交给栈中下一个中间件
else next(); //
}, function (req, res, next) {
// 渲染常规页面
res.render('regular');
});
// 处理 /user/:id, 渲染一个特殊页面
app.get('/user/:id', function (req, res, next) {
res.render('special');
});
静态资源的托管与访问
// 托管
app.use(express.static('public'));
// 访问
http://localhost:3000/images/kitten.jpg
http://localhost:3000/css/style.css
var options = {
dotfiles: 'ignore',
etag: false,
extensions: ['htm', 'html'],
index: false,
maxAge: '1d',
redirect: false,
setHeaders: function (res, path, stat) {
res.set('x-timestamp', Date.now());
}
}
app.use(express.static('public', options));
模板引擎
views,放模板文件的目录,比如:
app.set('views', './views')
view engine,模板引擎,比如:
app.set('view engine', 'jade')
html
head
title!= title
body
h1!= message
app.get('/', function (req, res) {
res.render('index', { title: 'Hey', message: 'Hello there!'});
});
学习链接
- 中文官网
- http://www.expressjs
- Express 4.x API 中文手册
- http://www.expressjs/4x/api.html
- 关于 Express 的书籍和博客
- http://www.expressjs/resources/books-blogs.html
- Express 应用实例
- http://www.expressjs/resources/applications.html
- 菜鸟教程
- http://www.runoob/nodejs/nodejs-express-framework.html
- Express 4.x API 中文文档
- http://www.runoob/w3cnote/express-4-x-api.html
更多推荐
Express 菜鸟笔记
发布评论