router.patch返回404“未找到”

时间:2020-05-31 17:55:03

标签: node.js express

我正在使用小型节点api,但补丁方法有问题。 我的router.patch返回了404。

这是我的路线的样子:

router.param('userId', findById);

router.patch(
  '/api/projects/update/:projectId/:userId',
  authCheck,
  isAdmin,
  findProjectById,
  update
);

findById基于我的:userId参数。整个方法如下:

exports.findById = async (req, res, next) => {
  try {
    let user = await User.findById(req.params.userId);
    if (!user) return res.status(400).json({ msg: 'User not found' });
    next();
  } catch (err) {
    console.error(err.message);
    if (err.kind === 'ObjectId') {
      return res.status(400).json({ msg: 'User not found' });
    }
    res.status(500).send('Server Error');
  }
};

基于此,我应该为适当的项目找到合适的用户。

我的两种补液方法:

exports.authCheck = async (req, res, next) => {
  try {
    /* get token from header
    replace('Bearer', '') - this will remove bearer from token header
    */

    const token = req.header('Authorization').replace('Bearer', '');

    //check if no token
    if (!token) {
      return res.status(401).json({ msg: 'No token, authorization denied' });
    }

    /*
    decoded contains _id as a payload in token. Id is from getAuthToken */
    const decoded = jwt.verify(token, config.get('jwtSecret'));
    const user = await User.findOne({
      _id: decoded._id,
      'tokens.token': token,
    });

    if (!user) {
      throw new Error();
    }
    req.token = token;
    req.user = user;
    next();
  } catch (err) {
    res.status(401).json({ msg: 'Please authenticate' });
  }
};

exports.isAdmin = async (req, res, next) => {
  try {
    if (req.user.role !== config.get('roleSecret')) {
      return res.status(403).json({
        errors: [
          {
            msg: 'No Admin rights. Access Denied!!',
          },
        ],
      });
    }
    next();
  } catch (err) {
    res.status(403).json({ msg: 'Forbidden access' });
  }
};

最后,我的项目负责人{@ {1}} 在findProjectById, update中,我正在寻找基于路径参数的项目,并将其分配给findProjectById

project

我的更新方法尚未完成,因为我正在测试是否有任何问题

exports.findProjectById = async (req, res, next) => {
  const _id = req.params.projectId;
  try {
    let project = await Project.findById(_id);
    if (!project) return res.status(400).json({ msg: 'Porject not found' });
    req.project = project;
    next();
  } catch (err) {
    console.error(err.message);
    if (err.kind === 'ObjectId') {
      return res.status(400).json({ msg: 'Porject not found' });
    }
    res.status(500).send('Server Error');
  }
};

不知道我在这里想念什么,但是经过几个小时的搜索,仍然无法正常工作

1 个答案:

答案 0 :(得分:0)

开始工作。问题出在我的路由器路径上。

/api/projects/update/:projectId/:userId 应该 /projects/update/:projectId/:userId

可以关闭