在Nodejs Express App Route中不起作用

时间:2020-08-23 10:17:15

标签: javascript node.js express express-router

我有一个app.js文件-

var data = [
  'FooBar\nBarFoo\nFoodBar\n' 
]
 let headers = {
    BarOfFoo: "",
    FoodOfBar: "",
    BarBarOfFoo: "",
    };

let result = Array.of(Object.fromEntries(data.reduce((acc,curr) => {
  curr.trim().split("\n").forEach((v, i) => {acc[i]=[acc[i], v]})
  return acc;
},Object.keys(headers))))

console.log(result)

我的路线文件是-

const express = require('express');
const app = express();
const port = process.env.PORT || 8080;

const userRoute = require('./routes/user.route');
app.use('/user', userRoute);

app.listen(port, () => {
        console.log(chalk.blue(`Express app listening at http://localhost:${port}`));
});

我无法到达“ / toggleActive”路径。

但是如果我将路由文件定义为-

const express = require('express');
const router = express.Router();

const userController = require('../controllers/user.controller');

router.post('/:id', userController.userDetails);
router.post('/toggleActive', userController.toggleStatus);

module.exports = router;

然后一切正常。

2 个答案:

答案 0 :(得分:2)

如果您定义这样的路线

router.post('/:id', userController.userDetails);
router.post('/toggleActive', userController.toggleStatus);

然后,服务器将捕获通过POST发送到/user的所有内容,因为:id是一个变量。也可能是字符串“ toggleActive”。 你可以做这样的事情

router.post('/:id/toggleActive', userController.toggleStatus);
router.post('/:id', userController.userDetails);

答案 1 :(得分:1)

您的网址

/user/toogleActive
将通过路径与路径进行匹配。这意味着定义的第一个路由将与网址匹配,该网址将提取toogleActive作为参数。但是,要更改此设置,应将路由
/toogleActive
放在a之前,以实现express使用的第一个匹配策略。