让我们从下往上开始吧.
最初,有一个由Ryan Dahl编写的node.js的内置http.Server.您编写了一个function(req, res),并且每次接受新连接时,Node都会调用您的函数:
// Hello world HTTP server using http module:
var http = require('http');
var app = http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello, world.');
});
app.listen(8080, '127.0.0.1');
Run Code Online (Sandbox Code Playgroud)
由Tim Caswell编写的Connect只是http.Server的子类,可以更轻松地组织代码.您可以将一些中间件链接在一起,而不是编写处理每个请求的单个回调.function(req, res, next)如果可能,每个中间件都是处理请求的中间件,或者next(error)如果它没有完成处理用户的请求则调用.中间件处理程序按其顺序调用use; 你应该app.use(connect.errorHandler())在最后打电话给全能.
一个重要的中间件是路由器,它允许您根据URL路径的模式过滤一些中间件.路由模式的语法基于ruby的Sinatra路由.当我使用过滤器时/hello/:name,req.params.name将设置为URL的匹配部分.
var connect = require('connect');
var app = connect.createServer();
app.use(connect.favicon());
app.use(connect.logger());,
app.use(connect.router(function(app) {
app.get('/hello/:name', function(req, res, next) {
try {
if (Math.random() > 0.5) {
throw new Error('Random error!');
}
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello, ' + req.params.name);
} catch (e) {
return next(e);
}
});
}));
app.listen(8080, '127.0.0.1');
Run Code Online (Sandbox Code Playgroud)
在Connect中,每个处理程序都是中间件!您可以使用bodyParser或cookieParser所需的任何功能,并且您自己的业务逻辑也是具有相同签名的中间件功能function(req, res, next).该连接主页提供了内置的中间件的列表.
由TJ Holowaychuk编写的Express的http服务器又是Connect的一个子类,它更强调Sinatra风格.在Connect中,没有你没有要求的魔法,但在Express中,路由器和qs解析器(设置req.query)是自动used.清除路由器语法; 你打电话app.get,app.post等直接(和路由器被放置在第一次调用),而不是把他们一个函数内.
Express还包含许多其他记录良好的功能和帮助函数,以扩展app,req和res.
Express的一个特性是res.render,app.set('views')使用扩展所暗示的模板引擎呈现给定的模板文件(相对于或$ PWD/views),并且res.partial在集合的每个元素上调用渲染(这只是任何arraylike对象).但我没有使用这个可选功能; 如果你不关心快递的模板,你可以res.send自己做数据.
| 归档时间: |
|
| 查看次数: |
1324 次 |
| 最近记录: |