//src\pages\api\users\[id].ts import type { NextApiRequest, NextApiResponse } from 'next'; import { User } from '@/models'; import connectDB from '@/lib/connectDB'; import { IUser } from '@/models/types'; // 导入 IUser 接口类型 import bcrypt from 'bcryptjs'; const handler = async (req: NextApiRequest, res: NextApiResponse) => { const { query: { id }, method } = req; switch (method) { case 'GET': try { const user = await User.findById(id).populate('团队').populate('角色') as IUser; // 断言为 IUser 类型 if (!user) { return res.status(404).json({ message: '未找到用户' }); } res.status(200).json(user); } catch (error) { res.status(500).json({ message: '服务器错误' }); } break; case 'PUT': try { const { 姓名, 电话, 邮箱, 团队, 角色, 微信昵称, 头像, unionid, openid, 密码 } = req.body as IUser; // 断言为 IUser 类型 const updateData = { 姓名, 电话, 邮箱, 团队, 角色, 微信昵称, 头像, unionid, openid } as IUser; // 断言为 IUser 类型 // 只有当密码字段存在且非空时,才进行更新密码操作 if (密码) { updateData.密码 = await bcrypt.hash(密码, 10); } const updatedUser = await User.findByIdAndUpdate(id, updateData, { new: true }) as IUser; // 断言为 IUser 类型 if (!updatedUser) { return res.status(404).json({ message: '未找到用户' }); } res.status(200).json({ message: '用户更新成功', user: updatedUser }); } catch (error) { res.status(400).json({ message: '更新用户失败' }); } break; case 'DELETE': try { const deletedUser = await User.findByIdAndDelete(id); if (!deletedUser) { return res.status(404).json({ message: '未找到用户' }); } res.status(200).json({ message: '用户删除成功' }); } catch (error) { res.status(500).json({ message: '服务器错误' }); } break; default: res.setHeader('Allow', ['GET', 'PUT', 'DELETE']); res.status(405).end(`不允许 ${method} 方法`); } }; export default connectDB(handler);