1. hello world

const express = require('express');
const app = express();
app.get('/',(req,res)=>{
    res.send('hello world');
});
const server = app.listen(3000, () => {
    var host = server.address().address;
    var port = server.address().port;
    console.log('Example app listening at http://%s:%s', host, port);
});

2. 静态服务器

const express = require('express');
const app = express();
app.use(express.static('static'));
const server = app.listen(3000, () => {
    var host = server.address().address;
    var port = server.address().port;
    console.log('Example app listening at http://%s:%s', host, port);
});

3. 路由

3.1 method

// GET method route
app.get('/', function (req, res) {
  res.send('GET request to the homepage');
});

// POST method route
app.post('/', function (req, res) {
  res.send('POST request to the homepage');
});

3.2 路径的特殊写法

app.get('/article/:id', function(req, res) {
   res.render('article',{id, req.params.id});
});

另外支持正则,这应该能处理绝大部分需求。

3.3 回调函数的写法

类似中间件

var cb0 = function (req, res, next) {
  console.log('CB0');
  next();
}

var cb1 = function (req, res, next) {
  console.log('CB1');
  next();
}

var cb2 = function (req, res) {
  res.send('Hello from C!');
}

app.get('/example/c', [cb0, cb1, cb2]);

3.4 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');
  });

3.5 express.Router

从Express 4.0开始,路由器功能成了一个单独的组件Express.Router。它好像小型的express应用程序一样,有自己的use、get、param和route方法。

4. 中间件

中间件(middleware)就是处理HTTP请求的函数。它最大的特点就是,一个中间件处理完,再传递给下一个中间件。App实例在运行过程中,会调用一系列的中间件。

每个中间件可以从App实例,接收三个参数,依次为request对象(代表HTTP请求)、response对象(代表HTTP回应),next回调函数(代表下一个中间件)。每个中间件都可以对HTTP请求(request对象)进行加工,并且决定是否调用next方法,将request对象再传给下一个中间件。

一个不进行任何操作、只传递request对象的中间件,就是下面这样。

function uselessMiddleware(req, res, next) {
  next();
}

express的官方文档把中间件分为五种:应用级中间件、路由级中间件、错误处理中间件、内置中间件、第三方中间件

5. express处理get和post请求

5.1 get请求

// http://localhost:3000/users/333?name=michael
app.get('/users/:id',(req,res)=>{
  console.log('query',req.query); // {name:michael}
  console.log('params',req.params);// {id:3000}
  res.send('query success');
});

5.2 post请求

body-parser

const bodyParser = require('body-parser')

// parse application/x-www-form-urlencoded 
app.use(bodyParser.urlencoded({ extended: false }))
 
// parse application/json 
app.use(bodyParser.json())

app.post('/todos/insert',(req,res)=>{
  console.log('body', req.body);
  res.send('post success');
});

5.3 上传图片 multer


唯见长江天际流
827 声望11 粉丝

黄鹤楼送孟浩然之广陵


引用和评论

0 条评论