You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postman调用refresh_token接口报CANNOT POST错误求助

问题:调用refresh_token接口返回CANNOT POST错误

完成用户注册并获取access token后,在Postman中调用refresh_token接口时,虽已成功获取到cookie,但返回体提示CANNOT POST错误。以下是相关代码,请求排查解决:

用户控制器代码

const Users = require('../models/userModel');
const bcrypt = require('bcrypt');
const { createReadStream } = require('fs');
const jwt = require('jsonwebtoken');
const userCtr = {
    register : async(req, res) => {
       try  {
        const  { name , email , password}= req.body;
        const user =  await Users.findOne({email})
        if  ( user ) return res.status(400).json({msg : "The email already exists."})
         if(password.length < 6)
            return res.status(400).json({msg : "Password is at least 6 characters long."})
           
          // password encryption
          const passwordHash = await bcrypt.hash(password, 10);
          const newUser = new Users({
            name , email , password : passwordHash 
          })
           
          // save mongoDB 
            await newUser.save();
            // create jwt  to authenticate  
            const accesstoken = createAccessToken({id : newUser._id})
            const refreshtoken = createRefreshToken({id : newUser._id})
            res.cookie('refreshtoken' , refreshtoken , {
                httpOnly : true ,
                path : '/user/refresh_token'
            })
            res.json({accesstoken})
       }
       catch (err) {
        return res.status(500).json({msg : err.message})
       }
    } , 
    refreshtoken  : async ( req , res )=>{
      try {
        const rf_token = req.cookies.refreshtoken;
        if(!rf_token)return res.status(400).json({msg :" login or register"});
        jwt.verify(rf_token, process.env.REFRESH_SECRET,(err , user)=>{
          if(err)return res.status(400).json({msg : "login or register"});
          const accesstoken = createAccessToken({id : user.id})
          res.json({user , accesstoken})
        })
      }
      catch(err) {
        return res.status(500).json({msg : err.message});
      }
    }
  }
const createAccessToken=(payload)=>{
  return jwt.sign(payload, process.env.JWT_SECRET , {expiresIn : "1d"});
}
const createRefreshToken=(payload)=>{
  return jwt.sign(payload, process.env.REFRESH_SECRET, {expiresIn : "7d"});
}
module.exports = userCtr;

服务器代码

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
const mongoose = require('mongoose');
require('dotenv').config();
const cookieParser = require('cookie-parser');
app.use(cookieParser());

const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
    res.json({ message: 'Hello World!' });
})
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});
// routes  
app.use('/user' , require('./routes/userRoute'));

// connect mongo 
const URI = process.env.MONGODB_URL  ;
mongoose.connect(URI, {})
.then(() => {
console.log('Connected to MongoDB');
}).catch(err =>{
    console.log(err);
});

路由代码

const router = require('express').Router();
const userCtr = require('../controllers/userController');
router.post('/register', userCtr.register);
router.post('/refreshtoken', userCtr.refreshtoken);
module.exports = router;

问题排查与解决方案

核心问题:路径不匹配

  1. Cookie路径与接口路径不一致:注册接口中设置cookie的path为/user/refresh_token,但路由中refresh接口的路径是/refreshtoken,结合服务器的/user前缀,实际接口路径为/user/refreshtoken。Cookie的路径必须与请求接口的路径匹配才能被携带。
  2. 请求路径错误:你在Postman中可能调用了错误的路径/user/refresh_token(带下划线),但服务器并没有注册该路径的POST路由,因此返回CANNOT POST。

修复步骤

  1. 修正Cookie路径:在用户控制器的register方法中,将cookie的path改为/user/refreshtoken:
    res.cookie('refreshtoken', refreshtoken, {
        httpOnly: true,
        path: '/user/refreshtoken' // 去掉下划线,与接口路径一致
    })
    
  2. 调用正确的接口路径:在Postman中请求http://localhost:3000/user/refreshtoken(确保端口与服务器一致),请求方法为POST。
  3. 额外检查:确认路由文件userRoute.js的路径正确,服务器中require('./routes/userRoute')的路径与实际文件位置匹配。

内容的提问来源于stack exchange,提问作者nimit sodhani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:14:57