Node.js 我将app.use(头盔…放在app.use语句中)放在哪里重要吗?

Node.js 我将app.use(头盔…放在app.use语句中)放在哪里重要吗?,node.js,express,iframe,clickjacking,helmet.js,Node.js,Express,Iframe,Clickjacking,Helmet.js,我有一个node.js应用程序,其中使用了多个app.use语句。我想包括app.use(helmet.frameguard({action:'deny'}));line通过阻止我的网站出现在iFrame中来防止点击劫持,我想问一下,我在app.use语句的顺序中放置这一行是否重要?我是否需要将它放置在所有其他app.use语句中的特定位置(例如,app.use(cookie-parser());)我的意思是,所有中间件都是逐行运行的,或者说是同步运行的 只需确保您应该将其置于路由初始化之上(因

我有一个node.js应用程序,其中使用了多个app.use语句。我想包括
app.use(helmet.frameguard({action:'deny'}));
line通过阻止我的网站出现在iFrame中来防止点击劫持,我想问一下,我在app.use语句的顺序中放置这一行是否重要?我是否需要将它放置在所有其他app.use语句中的特定位置(例如,
app.use(cookie-parser());
)我的意思是,所有中间件都是逐行运行的,或者说是同步运行的


只需确保您应该将其置于路由初始化之上(因为如果它转到路由,则可能只是从那里返回函数响应,因此它不会转到下一个中间件,因为响应已经发送)。可以将其粘贴到cookie解析器的上方或下方。

我的意思是,所有中间件都是逐行运行的,或者可以说是同步运行的

只需确保您应该将其放置在路由初始化上方(因为如果它转到路由,您可能只从那里返回函数响应,因此它不会转到下一个中间件,因为响应已经发送)。可以将其粘贴到cookie解析器的上方或下方。

摘要:我建议将
helmet()
首先

这里是头盔维护人员。这是一个明确的问题,而不是头盔问题

Express应用程序按顺序运行其中间件。例如,下面将为每个请求打印
foo
,然后打印
bar

功能中间件(请求、恢复、下一步){
控制台日志(“foo”);
next();
}
功能(req、res、next){
控制台日志(“bar”);
next();
}
应用程序使用(Foo中间件);
应用程序使用(BAR中间件);
// ...
或者,这将打印
bar
,然后打印
foo

app.use(中间件);
应用程序使用(Foo中间件);
所以,如果您希望头盔的标题应用于所有响应,那么将它们放在第一位很重要

例如,这将为每个请求设置头盔标题:

const-app=express();
应用(头盔());
// ...
但这一个可能不会,因为静态文件中间件可能会首先访问它:

const-app=express();
应用程序使用(express.static(“./static_文件”);
应用(头盔());
// ...
值得注意的是,路由处理程序(如
app.get('/foo')
)在概念上与中间件非常相似。这两个代码段几乎相同(尽管您应该在实际应用程序中使用前者):

app.get(“/foo”,(请求,请求)=>{
res.send(“你好,世界!”);
});
app.use((请求、恢复、下一步)=>{
if(req.method==“GET”&&req.url==“/foo”){
res.send(“你好,世界!”);
}否则{
next();
}
});
摘要:我建议将
头盔()放在第一位

这里是头盔维护人员。这是一个明确的问题,而不是头盔问题

Express应用程序按顺序运行其中间件。例如,下面将为每个请求打印
foo
,然后打印
bar

功能中间件(请求、恢复、下一步){
控制台日志(“foo”);
next();
}
功能(req、res、next){
控制台日志(“bar”);
next();
}
应用程序使用(Foo中间件);
应用程序使用(BAR中间件);
// ...
或者,这将打印
bar
,然后打印
foo

app.use(中间件);
应用程序使用(Foo中间件);
所以,如果您希望头盔的标题应用于所有响应,那么将它们放在第一位很重要

例如,这将为每个请求设置头盔标题:

const-app=express();
应用(头盔());
// ...
但这一个可能不会,因为静态文件中间件可能会首先访问它:

const-app=express();
应用程序使用(express.static(“./static_文件”);
应用(头盔());
// ...
值得注意的是,路由处理程序(如
app.get('/foo')
)在概念上与中间件非常相似。这两个代码段几乎相同(尽管您应该在实际应用程序中使用前者):

app.get(“/foo”,(请求,请求)=>{
res.send(“你好,世界!”);
});
app.use((请求、恢复、下一步)=>{
if(req.method==“GET”&&req.url==“/foo”){
res.send(“你好,世界!”);
}否则{
next();
}
});