我是表示和node.js的新手,我不知道app.use和app.get之间的区别。似乎您可以同时使用它们来发送信息。例如:
app.use('/',function(req, res,next) {
res.send('Hello');
next();
});
似乎与此相同:
app.get('/', function (req,res) {
res.send('Hello');
});
app.use()
用于将中间件绑定到您的应用程序。它path
是一个“
安装 ”或“ 前缀 ”路径,并限制中间件仅适用于以它 开头的 任何请求的路径。它甚至可以用于嵌入另一个应用程序:
// subapp.js
var express = require('express');
var app = modules.exports = express();
// ...
// server.js
var express = require('express');
var app = express();
app.use('/subapp', require('./subapp'));
// ...
通过指定/
为“ mount ”路径,app.use()
将响应以开头的所有路径,/
并且所有路径均与使用的HTTP动词无关:
GET /
PUT /foo
POST /foo/bar
app.get()
另一方面,它是Express的应用程序路由的一部分,用于与GET
HTTP动词一起请求时匹配和处理特定路由:
GET /
而且,您的示例的等效路由app.use()
实际上是:
app.all(/^\/.*/, function (req, res) {
res.send('Hello');
});
( 更新:试图更好地证明差异。 )
包括在内的路由方法app.get()
是便利的方法,可帮助您更准确地将响应与请求对齐。它们还增加了对功能的支持,例如参数和next('route')
。
每个app.get()
调用中都有一个app.use()
,因此您当然可以app.use()
直接使用来完成所有这些操作。但是,这样做通常需要(可能不必要)重新实现各种数量的样板代码。
例子:
app.get('/', function (req, res) {
// …
});
与
app.use('/', function (req, res, next) {
if (req.method !== 'GET' || req.url !== '/')
return next();
// ...
});
app.get('/', authorize('ADMIN'), function (req, res) {
// …
});
与
const authorizeAdmin = authorize('ADMIN');
app.use('/', function (req, res, next) {
if (req.method !== 'GET' || req.url !== '/')
return next();
authorizeAdmin(req, res, function (err) {
if (err) return next(err);
// ...
});
});
app.get('/item/:id', function (req, res) {
let id = req.params.id;
// …
});
与
const pathToRegExp = require('path-to-regexp');
function prepareParams(matches, pathKeys, previousParams) {
var params = previousParams || {};
// TODO: support repeating keys...
matches.slice(1).forEach(function (segment, index) {
let { name } = pathKeys[index];
params[name] = segment;
});
return params;
}
const itemIdKeys = [];
const itemIdPattern = pathToRegExp('/item/:id', itemIdKeys);
app.use('/', function (req, res, next) {
if (req.method !== 'GET') return next();
var urlMatch = itemIdPattern.exec(req.url);
if (!urlMatch) return next();
if (itemIdKeys && itemIdKeys.length)
req.params = prepareParams(urlMatch, itemIdKeys, req.params);
let id = req.params.id;
// ...
});
注:快车实现这些功能都包含在它的
Router
,Layer
和Route
。
问题内容: 我从NodeJS和Express 4开始,我有些困惑。我正在阅读Express网站,但看不到 何时 使用路由处理程序或何时使用。 如我所见,例如,如果我想在用户点击时显示页面或其他内容,则应使用: 一开始,我认为这很旧(对于Express 3)。是这样吗,还是Express 4也是如此? 如果这是在Express 4中实现的方式,它的用途是什么? 我读了几乎与上面相同的示例,但是使用了
问题内容: 和Node.JS Express 之间有有用的区别吗? 问题答案: 在大多数情况下,它们将等效地工作。最大的不同是中间件的应用顺序: 附加到应用程序的路由器,因此只要到达app.router中间件即可使用(该中间件处理所有方法路由… GET,POST等)。 注意:app.router已在Express 4.x中弃用 附加到应用程序的主要中间件堆栈,因此按中间件指定的顺序使用。例如,如果
问题内容: 我刚刚阅读Express文档,发现了这两个术语,并且 我知道在节点中用于在路径上 安装中间件 ,并且我们经常在大多数节点应用中使用它。但是两者都一样吗?如果没有,有什么区别? 我在这里了解了路由器。我还在SO上找到类似的问题,“ express.Router”和使用“app.get”进行路由之间有什么区别?和app.all(’*’)和app.use(’/’)之间的区别,但它们并没有真正
问题内容: 两者之间的实际区别是什么,并且两者似乎都执行相同的响应客户端的操作。 问题答案: 传递对象或数组时,方法是相同的,但也会转换非对象,例如和,它们是无效的JSON。 该方法还使用和应用程序设置,因此您可以使用更多选项来格式化JSON。这些选项设置如下: 并传递给一个这样的: 这是send方法没有的方法中的代码: 该方法最终以a 结尾:
和之间的实际区别是什么,因为两者似乎都执行相同的响应客户端的操作。
问题内容: 我有一个具有以下用于路由的代码的应用程序: 现在,我必须将路由代码放在不同的文件中,因此我尝试使用此方法,但是它可能 无法 工作,因为它代替了它,而使用了: 如何使用将路由放入不同的文件中? 为什么,,,等,都没有在工作使用后在其中? 问题答案: 这是一个简单的例子: 在这里, 将实例安装在 ,这样添加到实例的任何路由都将相对于。