当使用Express Router时,这两行等效吗?

时间:2019-06-30 04:42:19

标签: javascript node.js express

我在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

1 个答案:

答案 0 :(得分:0)

可以通过3种方法在应用程序中声明路由

这些是:

  1. app.get("path", fn)
  2. router.get("path", fn)
  3. 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

注意:上面的代码仅用于解释目的,可能存在语法错误,预期该代码不能按原样运行。用户可能需要更改代码才能使其正常工作。