слова, написанные впереди
Недавно я изучаю Egg.js, который представляет собой каркас развития узлов на основе KOA, запущенную ALI, которая рождена для рамок и приложений на уровне предприятия.Официальная документация Egg.jsОн уже очень полный.Те, кто хочет изучить Egg.js, могут напрямую просмотреть официальную документацию.
Поскольку обычная разработка — это режим разделения фронтенда и бекенда, я подумал об использовании Egg для создания фоновых сервисов и написания набора API-интерфейсов для взаимодействия с другими проектами. Стек технологий этого проекта использует Egg.js, MongoDB и mongoose. В этой статье описывается процесс написания модуля регистрации и входа в систему, а также модуля пользовательского центра. Цель состоит в том, чтобы подвести итоги процесса обучения во времени, использовать возможности документирования, делиться и общаться со всеми, а также добиваться прогресса вместе.
адрес проекта:Egg-API
Проект продолжает обновляться, нравится смотреть, обращать внимание, звездочка, вилка, это движущая сила для меня, чтобы сохраняться долгое время (._.) ✎_
Ниже приведен текст
анализ спроса
Для модуля регистрации и входа в систему анализ спроса выглядит следующим образом:
- Зарегистрируйтесь как новый пользователь и проверьте введенные данные
- Для авторизации и входа в систему необходимо верифицировать вводимые данные, основываясь на аутентификации по токену
- функция выхода из системы
- Войдите, чтобы просмотреть личную информацию в модуле пользовательского центра
- Изменить личную информацию в модуле пользовательского центра
Анализ и дизайн данных
Явные данные:
- имя_пользователя: Строковое имя пользователя
- userPass: Строковый пароль учетной записи
- Пользователь: почтовый ящик пользователя String
- телефон: Строка номер телефона
- аватар: Строка Аватар
- Возраст: возраст числа
- секс: струнный секс
- Город: Струнный город
Неявные данные:
- userRole: Число Роль пользователя (1. Обычный пользователь, 2. Администратор, 3. Суперадминистратор, пользователь по умолчанию — обычный пользователь, а суперадминистратор создается при создании базы данных)
- userCreate: Дата, время создания пользователем
- lastLoginTime: Дата Время последнего входа в систему
- Laseloginplace: string Последний адрес входа
Анализ и проектирование API
В следующем описании интерфейса api относится к имени интерфейса, params относится к входящим данным, code относится к идентификационному коду результата ответа, msg относится к описанию информации о результате ответа, а data относится к данным, успешно возвращенным ответом.
интерфейс регистрации
api: /api/v1/signup (post)
params: {
userName: String, // 用户名,具有唯一性
userPass: String, // 用户密码
userEmail: String, // 用户邮箱
}
code: 1、注册成功 0:输入信息不完善或有误 -1:注册失败,该用户名已存在
msg: 响应返回的信息说明
data: {
_id: _id,
userName: 用户名,
token: 生成的token,
}
интерфейс входа
api: /api/v1/signin (post,请求头带token)
params: {
userName: String, // 用户名
userPass: String, // 用户密码
}
code: 1、登录成功 0:输入信息不完善或有误 -1:用户不存在
msg: 响应返回的信息说明
data: {
_id: _id,
userName: 用户名,
lastLoginTime: 上次登录时间,
lastLoginPlace: 上次登录地点,
}
выход из системы
api: /api/v1/signout (get)
code: 1、登出成功,前端退出系统并清空token
msg: 登出响应返回信息说明
data: {}
Интерфейс просмотра личной информации
api: /api/v1/user/userName (post,请求头带token)
params: {
userName: String,
}
code: 1、查询成功 0、输入信息不完善 -1、查询失败
msg: 查找个人信息返回信息说明
data: {
userName: 用户名,
userEmail: 用户邮箱,
age: 年龄,
city: 城市,
......
}
Изменить интерфейс личной информации
api: /api/v1/user/userName (put,token)
params: {
...... // 更改的信息
}
code: 1、更新成功 0、输入信息不完善或有误 -1、更新失败
msg: 更新个人信息返回信息说明
data: {
userName: 用户名,
......
}
Реализация кодирования
Примечание. Описание реализации кодирования содержит только часть, перейдите к полному содержанию.Egg-API
Предполагая, что вы уже инициализировали проект, соглашение о структуре каталогов проекта соответствует официальному. Поскольку мы собираемся использовать базу данных MongoDB, мы должны сначала установить egg-mongoose и написать в файле конфигурации:
// config/plugin.js
exports.mongoose = {
enable: true,
package: 'egg-mongoose',
};
// config/config.default.js
config.mongoose = {
url: 'mongodb://127.0.0.1/apiExample',
options: {},
};
Определим наш файл схемы в папке модели:
const UserSchema = new Schema({
userName: { type: String, unique: true, required: true, },
});
Определение маршрута:
router.post('/api/v1/signup', controller.user.signup);
Запись контроллера: используется для анализа ввода пользователя и возврата соответствующего результата после обработки. Мы можем поместить полученные данные в рендер для рендеринга, а затем отправить отрендеренный результат в браузер, или мы можем напрямую присвоить данные ctx.body, а затем вернуть их как json.
class UserController extends Controller {
// 登录
async signin() {
const { ctx } = this;
const rule = {
userName: { type: 'string', required: true, message: '必填项' },
userPass: { type: 'string', required: true, message: '必填项' },
};
const signinMsg = ctx.request.body;
await ctx.validate(rule, signinMsg);
signinMsg.userPass = ctx.helper.encrypt(signinMsg.userPass);
const result = await ctx.service.user.signin(signinMsg);
ctx.body = result;
}
}
Написание службы: используется для написания уровня бизнес-логики, может использоваться повторно. Для обработки сложных данных, таких как отображаемая информация, требуется доступ к базам данных или обращение к сторонним службам.
class UserService extends Service {
// 更新用户信息
async updateUser(userMsg) {
const { ctx } = this;
const res = {};
const result = await ctx.model.User.findByIdAndUpdate(userMsg._id, userMsg);
res.code = 1;
res.msg = '用户信息已更改';
res.data = result;
return res;
}
}
Простая структура приложения node выглядит так, поэтому Egg.js отвечает за службы интерфейса.