nodejs报错cannot get,如何解决?

#我是后端新手,现在正在使用Node.js、Express和MongoDB编写一个后端函数,用于让用户订阅商家。

如果订阅成功则:
当前用户的following数组内,加入商家id
商家的follower数组内,增加当前用户id
最终返回201,{user}

当我完成编写后放进postman进行测试时,始终遇到错误。我想知道如何解决这个问题。

我的user models 文件:

import { Schema, model } from 'mongoose';

const schema: Schema = new Schema({
  username: {
    type: String,
    required: true,
    unique: true,
    match: /^[a-zA-Z0-9_]+$/,
  },

  nickname: {
    type: String,
    required: true,
  },

  email: {
    type: String,
    // validate if the format is correct
    match: /^([\w-.]+@([\w-]+\.)+[\w-]{2,4})?$/,
    trim: true,
    lowercase: true,
    unique: true,
    required: true,
  },

  password: {
    type: String,
    required: true,
  },

  phone_number: {
    // 0406123456
    type: String,
    length: 10,
    match: /^0[0-9]{9}$/,
    required: true,
  },

  signature: {
    type: String,
    required: true,
  },

  avatar: {
    type: String,
  },

  abn: {
    type: Number,
    length: 11,
  },

  is_business: {
    type: Boolean,
    required: true,
    default: false,
  },

  posts: [{
    type: Schema.Types.ObjectId,
    ref: "Post",
  },],

  following:  [{
    type: Schema.Types.ObjectId,
    ref: "User",
  },],

  follower: [{
    type: Schema.Types.ObjectId,
    ref: "User",
  }],

  dcoin: {
    type: Number,
    required: true,
    default: 0,
  },

  is_deactivate: {
    type: Boolean,
    required: true,
    default: false,
  },
},
{
  timestamps: {
    createdAt: 'created_at',
    updatedAt: 'updated_at',
  }
});
export default model('User', schema);

我的user controllers文件:


import { Request, Response } from 'express';
import UserModel from '../models/User';
import mongoose from 'mongoose';

export const index = async (req: Request, res: Response) => {
    const users = await UserModel.find().exec();
    // if users is empty, return 404
    if (users.length === 0) {
        res.status(404);
        res.json({ message: "Couldn't get all user details." });
        return;
    }
    res.json(users);
    res.status(200);
};

export const deactivate = async (req: Request, res: Response) => {
  const _id: mongoose.Types.ObjectId = new mongoose.Types.ObjectId(req.params.id);
  const user = await UserModel.findByIdAndUpdate( _id, { "is_deactivate": true }, { new: true }).exec();
  if (!user) {
    res.status(404).json({ message: 'User not found.' });
    return;
  }
  res.json(user).status(200);
};

export const activate = async (req: Request, res: Response) => {
  const _id: mongoose.Types.ObjectId = new mongoose.Types.ObjectId(req.params.id);
  const user = await UserModel.findByIdAndUpdate( _id, { "is_deactivate": false }, { new: true }).exec();
  if (!user) {
    res.status(404).json({ message: 'User not found.' });
    return;
  }
  res.json(user).status(200);
};

export const subscribe = async (req: Request, res: Response) => {
  const { userid, businessid } = req.params;
  
  // search for student id
  const user = await UserModel.findById(userid).exec();
  // search for business id
  const business = await UserModel.findById(businessid).exec();

  if(!user || !business){
    res.status(404).json({ error: 'user or business not found' });
    return;
  }

  if (!user.is_business) {
    return res.status(403).json({ message: 'User is not a business' });
  }

  business.follower.addToSet(userid);
  await business.save();

  user.following.addToSet(businessid);
  await user.save();
  
  return res.status(201).json({ user });

};

我的user routes文件:

import { Router } from 'express';
import { index, deactivate, activate, subscribe } from '../../controllers/users';

const userRouter = Router();

userRouter.get('/users', index);
userRouter.put('/users/deactivate/:id', deactivate);
userRouter.put('/users/activate/:id', activate);
userRouter.post('/users/subscribe/:userid/:businessid', subscribe);

export default userRouter;

user"Cannot get" 错误通常是由于 Express 路由配置错误导致的。这个错误表示 Express 接收到了一个 GET 请求,但是没有匹配到相应的路由处理器。

在你的情况下,你似乎没有定义处理 "GET" 请求的路由,因此当你发送 GET 请求时,Express 无法找到相应的处理器。你需要在路由定义中添加一个处理 "GET" 请求的处理器。例如,你可以添加一个根路由处理器来处理 GET 请求并返回一个消息。

以下是一种可能的解决方案:

import { Router, Request, Response } from 'express';
import { index, deactivate, activate, subscribe } from '../../controllers/users';
 
const userRouter = Router();
 
userRouter.get('/', (req: Request, res: Response) => {
  res.send('Welcome to the user API!');
});
userRouter.get('/users', index);
userRouter.put('/users/deactivate/:id', deactivate);
userRouter.put('/users/activate/:id', activate);
userRouter.post('/users/subscribe/:userid/:businessid', subscribe);
 
export default userRouter;

在这个例子中,我们添加了一个根路由处理器来处理 GET 请求并返回一个欢迎消息。这样,当你发送 GET 请求时,Express 将匹配根路由处理器并返回一个消息。如果你的路由定义已经包含了处理 GET 请求的处理器,则可能是其他问题导致了 "Cannot get" 错误,你需要进一步检查你的代码并尝试解决问题。