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

如何从MongoDB获取所有用户?后端接口实现求助

解决方案

步骤1:在mainController中添加获取所有用户的方法

在控制器的导出对象里新增getAllUsers方法,同时修正现有updateUser方法里的错误(原代码误用了未定义的User,应改为UserSchema):

getAllUsers: async (req, res) => {
    try {
        // 用find()获取所有用户,排除password字段避免泄露敏感信息
        const users = await UserSchema.find({}, { password: 0 });
        return res.send({
            error: false,
            message: '所有用户数据获取成功',
            data: users
        });
    } catch (error) {
        return res.send({
            error: true,
            message: '获取用户数据失败',
            data: null
        });
    }
}

步骤2:在mainRouter中注册新接口路由

先更新控制器的导入语句,加入getAllUsers,再添加对应的GET路由:

// 导入部分新增getAllUsers
const { login, register, getSingleUser, updateUser, getAllUsers } = require("../controller/mainController")

// 添加路由
mainRouter.get('/users', getAllUsers);

完整修改后的代码

修改后的mainController

const uid = require('uid-safe')
const bcrypt = require('bcrypt')
const UserSchema = require('../schemas/UserSchema');
const { default: mongoose } = require('mongoose');

module.exports = {
    register: async (req, res) => {
        const { username, email, password, image, city, country, firstName, lastName, phone, gender, birth } = req.body;
        const userExists = await UserSchema.findOne({ username });
        if (userExists) {
            return res.send({ error: true, message: 'User with this username exists', data: null });
        }
        const emailExists = await UserSchema.findOne({ email });
        if (emailExists) {
            return res.send({ error: true, message: 'User with this email exists', data: null });
        }
        const id = await uid(7);
        const hashedPass = await bcrypt.hash(password, 3);
        const user = new UserSchema({
            secret: id,
            username,
            email,
            password: hashedPass,
            image,
            city,
            country,
            firstName,
            lastName,
            phone,
            gender,
            birth
        });
        await user.save();
        return res.send({ error: false, message: 'User successfully registrated!', data: null });
    },
    login: async (req, res) => {
        const { username, password } = req.body;
        const loginUser = await UserSchema.findOne({ username });
        if (loginUser) {
            const passMatch = bcrypt.compare(password, loginUser.password)
            if (passMatch) {
                return res.send({ error: false, message: `Welcome back ${username}!`, data: loginUser })
            }
            return res.send({ error: true, message: 'Invalid password', data: null });
        };
        return res.send({ error: true, message: 'Invalid username', data: null });
    },
    getSingleUser: async (req, res) => {
        const { secret } = req.params;
        const findUser = await UserSchema.findOne({ secret });
        if (findUser) {
            return res.send({ error: false, message: 'User found', data: findUser });
        }
        return res.send({ error: true, message: 'User not found', data: null });
    },
    updateUser: async (req, res) => {
        try {
            // 修正:将User改为UserSchema
            const updateduser = await UserSchema.updateOne({ secret: req.params.secret }, { $set: req.body });
            res.status(200).json(updateduser);
        } catch (error) {
            res.status(400).json({ message: error.message });
        }
    },
    getAllUsers: async (req, res) => {
        try {
            // 排除password字段,保护敏感数据
            const users = await UserSchema.find({}, { password: 0 });
            return res.send({
                error: false,
                message: '所有用户数据获取成功',
                data: users
            });
        } catch (error) {
            return res.send({
                error: true,
                message: '获取用户数据失败',
                data: null
            });
        }
    }
};

修改后的mainRouter

const express = require('express')

const { login, register, getSingleUser, updateUser, getAllUsers } = require("../controller/mainController")
const { loginValidate, registerValidate } = require("../middleware/authValidator")

const mainRouter = express.Router()

mainRouter.post('/register', registerValidate, register);

mainRouter.post('/login', loginValidate, login);

mainRouter.get('/user/:secret', getSingleUser);

// 新增获取所有用户的路由
mainRouter.get('/users', getAllUsers);

module.exports = mainRouter;

额外提示

  • 如果需要分页或筛选用户,可以在find()中添加参数,比如UserSchema.find({}, { password:0 }).skip(0).limit(10)实现分页。
  • 生产环境建议给这个接口加权限验证,防止未授权访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:35:24