Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 控制器和中间件之间有什么区别_Node.js_Api_Express - Fatal编程技术网

Node.js 控制器和中间件之间有什么区别

Node.js 控制器和中间件之间有什么区别,node.js,api,express,Node.js,Api,Express,我正在用express.js编写API和API。我编写的原始API仅使用路由和原始SQL查询。此后,我重写了API,现在大部分使用ORM来响应模型和迁移 我的问题是中间件和控制器的区别和用例。目前只使用中间件,因为大多数在线资源只解释什么是中间件 我不理解控制器的用例。如果在适当的编程约定中使用它,我不想在API中省略它您应该将中间件视为API中的一个步骤,将控制器视为实际响应请求的实体 下面是一个示例,authenticationMiddleware是一个中间件,因为它是处理过程中的一个步骤,

我正在用express.js编写API和API。我编写的原始API仅使用路由和原始SQL查询。此后,我重写了API,现在大部分使用ORM来响应模型和迁移

我的问题是中间件和控制器的区别和用例。目前只使用中间件,因为大多数在线资源只解释什么是中间件


我不理解控制器的用例。如果在适当的编程约定中使用它,我不想在API中省略它

您应该将中间件视为API中的一个步骤,将控制器视为实际响应请求的实体

下面是一个示例,
authenticationMiddleware
是一个中间件,因为它是处理过程中的一个步骤,但不应返回响应。不过,如果出现错误,它也可以

然后
getItems
实际处理特定于此调用的逻辑

根据经验,中间件通常会被多次重用,并且通常不会响应。相反,控制器响应并在大多数时间特定于一个端点

const express=require(“express”);
常量app=express();
功能验证中间件(req、res、next){
//检查用户是否使用req.headers.Authorization进行了身份验证
//比如说
如果(已验证){
//用户已通过身份验证,我们可以进入下一步
next();
}否则{
//用户没有经过身份验证,我们到此为止
物质状态(401);
res.send(“身份验证期间出错”);
}
}
函数getItems(请求、恢复、下一步){
//这里我们关注的是实际的响应,我们假设用户已通过身份验证
res.send({items:[]});
}
app.get(“/items”、authenticationMiddleware、getItems);
app.post(“/items”,authenticationMiddleware,createItems);//重复使用相同的中间件
app.listen(3000);

如果您指的是node/express术语,那么中间件就是路由函数/方法(get、set、delete、use等)使用的回调。回调可以将响应发送或不发送回客户端。回调实际上是的“控制器”,如果您想这样称呼它们(例如:ASP.NET Core MVC),但这取决于您。下面是一段引用自。请注意术语“中间件”,其中没有提到“控制器”

中间件功能是可以访问请求对象(req)、响应对象(res)和下一个中间件的功能 在应用程序的请求-响应周期中运行。下一个 中间件函数通常由一个名为next的变量表示

中间件功能可以执行以下任务:

  • 执行任何代码
  • 对请求和响应对象进行更改
  • 结束请求-响应周期
  • 调用堆栈中的下一个中间件函数
还定义了有用的不同类型的中间件:

  • 应用级中间件
  • 路由器级中间件
  • 错误处理中间件
  • 内置中间件第三方中间件
从Mozilla的pov中可以看到另一个不错的例子,它确实提到了一些控制器/回调示例


除此之外,您还可以定义团队中的“控制器”是什么,并遵循命名约定。关键是你的个人资料和你如何区分你的关注点。

我明白了。这澄清了很多事情,“控制器”不是node/express的一阶组件。如果这样定义的话,它们就是项目工件。请注意,下一个答复。