【问题标题】:the router doesn't select correct function路由器没有选择正确的功能
【发布时间】:2021-01-23 07:56:54
【问题描述】:

当我使用postman 以http://localhost:3000/login 登录用户时,它总是运行注册功能。代码运行正常,它只是路由到错误的功能。当 url 为登录时如何将其重定向到 login,反之亦然。登录和注册功能都在同一个authentication.js文件中。

controllers/authentication.js

exports.register = (req, res) => {

[Some long code here]

 });


exports.login = (req, res, next) => { 

[Some long code here]

 });

routes/index.js

const express = require("express");
const ctrlAuth = require("../../controllers/authentication");
const router = express.Router();

router.post('/', ctrlAuth.register);
router.post('/', ctrlAuth.login);

module.exports = router;

app.js

const userRoutes = require("./app_api/routes/index");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.use("/login", userRoutes);
app.use("/register", userRoutes);
module.exports = app;

【问题讨论】:

    标签: javascript node.js express routes


    【解决方案1】:

    这里的原因是每次以 login 或 register 开头的路由访问您的 express 服务器时,它都会被路由到 userRoutes 文件,因为 login 和 register 路径段使用相同的路由文件根据您的代码。

    app.use("/login", userRoutes);  // ---> pointing to userRoutes
    app.use("/register", userRoutes); // ---> pointing to userRoutes
    

    一旦 express 移动到 userRoutes,左匹配的路径段是“/”和方法类型 POST。第一条路线同时满足这两个条件。因此,API 调用始终由注册处理程序提供服务。

    // match found here for "/" segment and post method type
    router.post('/', ctrlAuth.register); 
    
    // --> this route is never reached
    router.post('/', ctrlAuth.login);
    

    回答

    要解决此问题,您可以在文件中进行这些更改。

    app.js

    删除这些行:

    app.use("/login", userRoutes);
    app.use("/register", userRoutes);
    

    替换为:

    app.use("", userRoutes);
    

    routes/index.js

    删除这些行:

    router.post('/', ctrlAuth.register);
    router.post('/', ctrlAuth.login);
    

    替换为:

    router.post('/register', ctrlAuth.register);
    router.post('/login', ctrlAuth.login);
    

    【讨论】:

      猜你喜欢
      • 2020-07-29
      • 2015-04-14
      • 2018-10-25
      • 2016-09-30
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      相关资源
      最近更新 更多