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

使用ThunderClient请求出现Cannot POST /错误,路由或代码有问题?

问题:Express路由配置导致Cannot POST /错误

使用ThunderClient发送请求时出现Cannot POST /错误,切换为GET请求后仍报相同错误,已查阅相关问答未解决,相关代码如下:

Index.js

const connectToMongo = require('./db');
const express = require('express')

connectToMongo();
const app = express()
const port = 5000

//Available Routes
app.use('/api/auth', require('./routes/auth')) 
// app.use('./api/notes', require('./routes/notes'))


app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

auth.js(包含登录和注册逻辑)

const express = require('express');
const User = require('../models/User');
const router = express.Router();
const { body, validationResult } = require('express-validator');


// Create a User using: POST "/api/auth/". Doesn't require auth
router.post('/',[
    body('name').isLength ({min: 3}),
    body('email').isEmail(),
    body('password').isLength ({min: 5})
], (req, res)=>{
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(400).json({ errors: errors.array() });
    }
    res.send(req.body);
})

module.exports = router

user.js(用户数据模型)

const mongoose = require('mongoose');
const {Schema}= mongoose;

const UserSchema = new Schema({
    name:{
        type: String,
        required:  true
    },
    email: {
        type: String,
        required: true,
        unique: true
    },
    password:{
        type: String,
        required: true
    },
    date:{
        type: Date,
        default: Date.now
    },
    
  });

  module.exports = mongoose.model('user', UserSchema);

问题原因与解决方案

核心问题

  1. 缺少JSON请求体解析中间件:Express默认不会自动解析JSON格式的请求体,auth.js中需要读取req.body,但未配置express.json()中间件,会导致请求体无法被正常解析。
  2. 请求路径错误:注册的API路由是/api/auth,但你可能直接请求了根路径/,而根路径没有对应的路由处理逻辑,所以无论POST还是GET都会返回Cannot [METHOD] /错误。

修复步骤

  1. 修改Index.js,添加JSON解析中间件,并可选添加根路径的默认响应:
const connectToMongo = require('./db');
const express = require('express')

connectToMongo();
const app = express()
const port = 5000

// 新增:解析JSON格式的请求体
app.use(express.json())

//Available Routes
app.use('/api/auth', require('./routes/auth')) 
// app.use('/api/notes', require('./routes/notes'))

// 可选:给根路径添加默认响应,避免访问/时报错
app.get('/', (req, res) => {
  res.send('服务器运行中,请访问正确的API路径,例如POST /api/auth');
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})
  1. 正确测试API:
    • 在ThunderClient中选择POST方法,请求地址填写http://localhost:5000/api/auth
    • 在请求体中选择JSON格式,传入如下参数:
      {
        "name": "testuser",
        "email": "test@example.com",
        "password": "123456"
      }
      
    • 发送请求后,若参数符合验证规则,会返回你传入的请求体;若参数不符合(比如密码长度不足5位),会返回400状态码和验证错误信息。

内容的提问来源于stack exchange,提问作者Akshay bhasin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:55:53