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

NodeJS+Express+MongoDB开发REST API遇Cannot GET /api/auth/register错误求助

问题描述

我使用NodeJS、Express和MongoDB开发REST API,访问/api/auth/register路径时浏览器返回错误:Cannot GET /api/auth/register。已确认请求为GET请求,且项目中其他路由均能正常工作,无法定位错误原因,求帮忙排查。


项目代码文件

index.js

const express = require('express');
const dotenv = require("dotenv");
const helmet = require("helmet");
const morgan = require("morgan");
const bodyParser = require('body-parser');
const config = require('./config/config');
const cors = require('cors');
const app = express();

//user routes
const userRoute = require("./routes/userRoute")
const authRoute = require("./routes/authRoute")

//middleware
app.use(express.json());
app.use(helmet());
app.use(cors());
app.use(morgan("common"));

app.use("/api/user", userRoute);
app.use("/api/auth", authRoute);

//connexion to DB 
const mongoose = require('mongoose');

mongoose.connect(process.env.MONGODB_URI,(err) => {
if(!err) { console.log ('MongoDB connection succeded'); }
else { console.log ('Error in MongoDB connection : ' + JSON.stringufy(err, undefined, 2)); }
});

app.listen(process.env.PORT, () => console.log(`Server started at port : ${process.env.PORT}`));

userRoute.js

const express = require('express');
const mongoose = require('mongoose');
const User = require('../models/User');
const router = require("express").Router();

router.get("/",(req,res)=>{
res.send('user route');
//ok 
})

//register
// cannot GET
router.get("/register", async (req,res)=>{
const user = await new User({
username:"john",
email:"john@gmail.com",
password:"azerty"
})
await user.save();
res.send("ok");
})

module.exports = router;

authRoute.js

const express = require('express');
const mongoose = require('mongoose');
const User = require('../models/User');
const router = require("express").Router();

router.get("/",(req,res)=>{
   res.send('user auth');
   //ok
})

module.exports = router;

User 模型(user.js)

const mongoose = require('mongoose')

const UserSchema = new mongoose.Schema({
username:{
    type:String,
    require: true,
    min: 3,
    max: 20,
    unique:true
},
email:{
    type:String,
    require: true,
    max: 50,
    unique:true
},
password:{
    type:String,
    require: true,
    min: 4,
    unique:true
},
profilPicture:{
    type:String,
    default:""
},
coverPicture:{
    type:String,
    default:""
},
followers:{
    type:Array,
    default:[]
},
followins:{
    type:Array,
    default:[]
},
isAdmin:{
    type:Boolean,
    default:false
},
},
{timestamps:true}
)

module.exports = mongoose.model("User", UserSchema);

config.json

{
"development": {
    "PORT": 3000,
    "MONGODB_URI": "mongodb://localhost:27017/socialmedia",
    "JWT_SECRET": "SECRET#123",
    "JWT_EXP": "10m"
},
"production": {
    "PORT": 80,
    "MONGODB_URI": "mongodb://xxxxx/DB_Name",
    "JWT_SECRET": "SECRET#123",
    "JWT_EXP": "2m"
}
} 

config.js

// check env.
var env = process.env.NODE_ENV || 'development';
// fetch env. config
var config = require('./config.json');
var envConfig = config[env];
// add env. config values to process.env
Object.keys(envConfig).forEach(key => process.env[key] = envConfig[key]);

package.json

{
"name": "server",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon index.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"bcrypt": "^5.1.0",
"body-parser": "^1.20.1",
"cors": "^2.8.5",
"dotenv": "^16.0.3",
"env": "^0.0.2",
"express": "^4.18.2",
"helmet": "^6.0.0",
"mongoose": "^6.7.1",
"morgan": "^1.10.0",
"nodemon": "^2.0.20"
}
}

问题排查与修复

核心问题

你把/register路由定义在了userRoute.js文件中,对应的实际访问路径是/api/user/register,但你尝试访问的是/api/auth/register,而authRoute.js中并没有注册这个路由,因此返回Cannot GET错误。

修复步骤

  1. 迁移路由到正确文件
    将userRoute.js中的/register路由移动到authRoute.js中,修改后的authRoute.js如下:
const express = require('express');
const mongoose = require('mongoose');
const User = require('../models/User');
const router = require("express").Router();

router.get("/",(req,res)=>{
   res.send('user auth');
   //ok
})

// 迁移后的register路由
router.get("/register", async (req,res)=>{
  try {
    const user = await new User({
      username:"john",
      email:"john@gmail.com",
      password:"azerty"
    })
    await user.save();
    res.send("ok");
  } catch(err) {
    res.status(500).send(err.message);
  }
})

module.exports = router;
  1. 清理冗余代码
    删除userRoute.js中的/register路由代码。

  2. 修复其他潜在问题

  • 模型中password字段的unique:true约束不合理,实际场景中不需要密码唯一,建议移除该属性;
  • index.js中JSON.stringufy是拼写错误,应为JSON.stringify,否则数据库连接报错时会触发新错误;
  • 异步路由添加try/catch捕获错误,避免未处理的Promise异常导致服务器崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:30:35