我在google search中找不到官方文档。官方的express.Router()API文档在哪里,第1行和第2行是否相同?
如果是这样,只是使用偏好吗?
const express = require('express');
const router = express.Router();
router.get('path', callback); // line 1
router.route('path').get(callback); // line 2
答案 0 :(得分:0)
可以通过3种方法在应用程序中声明路由
这些是:
app.get("path", fn)
router.get("path", fn)
router.route("path").get(fn)
以上所有功能均用于在应用程序中生成http请求路由。
app.get
是最基本的,不建议用于大型项目。原因是与express.router
相比,它在处理路由时灵活性较差。在快速应用程序中,您将大量处理中间件。中间件是在应用程序的控制器功能之前执行的功能
例如,看看这一行
app.get("/user", verifyUser, createUser)
;`
上面,verifyUser
是一个中间件函数,可以通过(Request, Response, Next) arguments by the express framework, you can write your incoming request verification logic in verifyUser and can then call
NextFunction to pass the control to the next function with is the
createUser controller
来调用;
您可以在路由声明中拥有任意数量的中间件。
如果每次创建,删除,获取或修改用户时都需要调用verifyUser
,该怎么办?对于每个动作,您都需要像这样定义路线:
app.get("/user", verifyUser, fetchUser);
app.put("/user", verifyUser, updateUser);
app.post("/user", verifyUser, createUser);
app.delete("/user", verifyUser, deleteUser);
在大型应用程序中,您需要为不同的实体和路由定义不同的逻辑。
express.router
通过为我们提供了一种灵活性,可以在用户将/user
路由到中间件之前定义到达 // file: userRoutes.js
const router = express.Router();
router.use((req, res, next) => {
verifyUser(req, res, next);
});
function verifyUser(req, res, next) {
// verification logic here
if (/** verification is successful */)
return next(); // return to the controller
res.status(400).json({ msg: "user does not exists" });
}
router.get("/user", fetchUser);
router.put("/user", updateUser);
router.post("/user", createUser);
router.delete("/user", deleteUser);
module.exports = router;
// app.js
const userRoutes = require("./userRoutes");
app.use(userRoutes);
路由时的操作,从而解决了上述问题。
以上在快速路由器中的代码可以编写如下:
router.route("/user")
.get(fetchUser);
.put(updateUser);
.post(createUser);
.delete(deleteUser);
如果我们通过以下方式链接http请求方法,事情将变得非常简单:
df = pd.DataFrame(
{
'PART_UNIT':['A','A','A','B','B'],
'FiscalYear':['2015/2016','2016/2017','2018/2019','2015/2016','2017/2018'],
'PO_UNIT_PRICE':[10,12,11,45,54]
}
)
print(df)
0 A 2015/2016 10
1 A 2016/2017 12
2 A 2018/2019 11
3 B 2015/2016 45
4 B 2017/2018 54
注意:上面的代码仅用于解释目的,可能存在语法错误,预期该代码不能按原样运行。用户可能需要更改代码才能使其正常工作。