express学习

app.js文件:

var express = require('express');
var app = express();

var requestTime = function(req, res, next) {
      req.requestTime = Date.now();
      next();
};
app.use(requestTime);
app.get('/', function(req, res) {
      var responseText = 'Hello World!<br>';
      responseText += '<small>Requested at: ' +req.requestTime + '</small>';
      res.send(responseText);
});

app.listen(3000, function() {    console.log('Example app listening on port 3000!');});

执行

node app.js

起服务之后,个人理解这边 ** app.use(requestTime) **好比是进行一次请求后的回调处理,所以每请求一下localhost:3000/这个路径便会输出 ** Hello world Requested at: xxxxxx(时间戳) **。

由于app.use()是中间件方法,所以它能访问request对象和response对象以及在请求-响应循环中的next中间件函数。

** function(req, res, next) **这边的第三个参数可以是任何名称,但建议取名为next,官方文档是这样建议的。

中间件函数的执行任务的过程:

  • 执行代码
  • 对请求以及响应对象做些改变
  • 结束请求-响应的循环。
  • 在栈中通知下一个中间件方法。

如果目前的中间件方法没有结束请求-响应的循环,必须调用next()方法传递给下一个中间件方法,否则请求会被一直挂起。

一个express应用能用以下几种中间件:

  • 应用层中间件
  • 路由层中间件
  • 错误处理中间件
  • 内建中间件
  • 第三方中间件

在加载应用层和路由层中间件时能够加一个可选的安装路径。中间件方法也能够连续加载。

比如你在根目录中创建一个bird.js:

var express = require('express');

router.use(function timeLog(req, res, next) {
     console.log('Time', Date.now());
     next();
});

router.get('/', function(req, res) {
    res.send('Birds home page');
});

module.exports = router;

在app.js中可以有:

注: app.use()方法能够通过任何一种http方法(get, post, put等方法)访问。

应用层的方法有: app.use()和app.METHOD()。app.METHOD方法指的是HTTP请求方法。

以下例子:

app.get('/user/:id', function (req, res, next) {
    console.log('ID:', req.params.id);    next();
}, function (req, res, next) {
    res.send('User Info');});
// handler for the /user/:id path, which prints the user ID
app.get('/user/:id', function (req, res, next) {
    res.end(req.params.id);
});

Route处理使你能够对一个路径定义多个路由。以上例子第二个get不会被执行到,因为请求-响应循环在第一个get之后就结束了。

要跳过路由器中间件堆栈中剩余的中间件树,请用next('route')将控制权传递给下一个路由。注:next('route')仅在使用app.METHOD或router.method()函数装入的中间件函数中有效。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容