Express 菜鸟笔记

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.com.cn
  • Express 4.x API 中文手册
    • http://www.expressjs.com.cn/4x/api.html
  • 关于 Express 的书籍和博客
    • http://www.expressjs.com.cn/resources/books-blogs.html
  • Express 应用实例
    • http://www.expressjs.com.cn/resources/applications.html
  • 菜鸟教程
    • http://www.runoob.com/nodejs/nodejs-express-framework.html
  • Express 4.x API 中文文档
    • http://www.runoob.com/w3cnote/express-4-x-api.html

你可能感兴趣的:(Web,Node.js)