gpt4 book ai didi

node.js - 一些连接术语

转载 作者:搜寻专家 更新时间:2023-10-31 23:29:47 25 4
gpt4 key购买 nike

以下是与 ConnectJS for NodeJS 相关的文档中使用的三个术语,这些术语不断被使用,但我并不完全理解:

1) View 和 Controller

2) 部分和集合

3)中间件

最佳答案

让我们从下往上开始。

0级:内置http模块

一开始有node.js内置的http.Server瑞安·达尔 (Ryan Dahl) 撰写。您编写一个 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');

级别 1:连接

Connect ,由 Tim Caswell 编写,只是 http.Server 的一个子类,它使您更容易组织代码。您无需编写处理每个请求的单个回调,而是将一些中间件 链接在一起。每个中间件都是一个 function(req, res, next),如果可能,它会处理请求,如果没有完成处理用户的请求,则调用 next(error)。中间件处理程序按照它们的使用顺序被调用;你应该在最后调用包罗万象的 app.use(connect.errorHandler())

一个重要的中间件是路由器,它允许您根据 URL 路径的模式过滤一些中间件。 syntax for the route patterns基于 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');

在 Connect 中,每个处理程序都是中间件!您可以使用任何您需要的功能,例如 bodyParser 或 cookieParser,您自己的业务逻辑也是一个具有相同签名的中间件函数 function(req, res, next)connect homepage给出了内置中间件的列表。

第 2 级:Express.js

Express 的 http 服务器由 TJ Holowaychuk 编写,它又是 Connect 的一个子类,它更多地采用了 Sinatra 风格。在 Connect 中,没有你不需要的魔法,但在 Express 中,路由器和 qs 解析器(设置 req.query)自动使用d。路由器语法已清理;您直接调用 app.getapp.post 等(路由器位于第一次调用处),而不是将它们放在函数中。

express 还包含许多其他well-documented用于扩展应用程序、请求和资源的特性和辅助函数。

Express 的一个特性是 res.render,它使用扩展隐含的模板引擎,以及 res.partial,它在集合的每个元素上调用渲染(它只是任何类似数组的对象)。但是我没有使用这个可选功能;如果您不喜欢 express 的模板,您可以自己res.send 数据。

关于node.js - 一些连接术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6989273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com