58 lines
2.2 KiB
TypeScript
58 lines
2.2 KiB
TypeScript
//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);
|