Express.JS使用详解

2020-06-17 05:37:07易采站长站整理


var bodyParser = require('body-parser');
var methodOverride = require('method-override');

app.use(bodyParser());
app.use(methodOverride());
app.use(app.router);
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);

在更一般的logErrors可以写请求和错误信息到stderr,loggly,或类似的服务:


function logErrors(err, req, res, next) {
console.error(err.stack);
next(err);
}

clientErrorHandler的定义如下所示,,注意,这个错误将显式地传递到下一个。


function clientErrorHandler(err, req, res, next) {
if (req.xhr) {
res.send(500, { error: 'Something blew up!' });
} else {
next(err);
}
}

以下errorHandler“全方位”实现可以定义为:


function errorHandler(err, req, res, next) {
res.status(500);
res.render('error', { error: err });
}

用户在线计数

本节详细完整讲解一个(小)应用程序,使用Redis跟踪用户在线数量。首先创建一个包。json文件包含两个附件,一个用于redis客户端,另一个用于Express自己。也确保你已包装了redis并且通过$redis-server运行。


{
"name": "app",
"version": "0.0.1",
"dependencies": {
"express": "3.x",
"redis": "*"
}
}

接下来,你需要创建一个应用程序,和一个到redis的连接:


var express = require('express');
var redis = require('redis');
var db = redis.createClient();
var app = express();

接下来的中间件跟踪在线用户。在这里我们将使用排序集,这样我们通过可以redis查询在线用户,仅需要N毫秒。我们通过时间戳作为成员的“在线标准”。注意, 这里我们使用user-agent字符串代替通常的用户id。


app.use(function(req, res, next){
var ua = req.headers['user-agent'];
db.zadd('online', Date.now(), ua, next);
});

下一个中间件是在最后一刻使用zrevrangebyscore来获取最大在线用户数量,我们总是得到最近在线的用户,他的上限是当前时间戳减去60000毫秒。


app.use(function(req, res, next){
var min = 60 * 1000;
var ago = Date.now() - min;
db.zrevrangebyscore('online', '+inf', ago, function(err, users){
if (err) return next(err);
req.online = users;
next();
});
});

最后,我们通过一个url使用它,并绑定到一个端口!这就完了,在一个新浏览器访问这个应用程序,您会看到在线人数增加。