Files
SaaS2/src/pages/api/users/[id].ts
RUI 27733bd91e
All checks were successful
Next.js CI/CD 流水线 / deploy (push) Successful in 4m44s
0610.1
2025-06-10 16:14:49 +08:00

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);