Egg.js создает API фонового сервиса

Node.js API

слова, написанные впереди

Недавно я изучаю 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 отвечает за службы интерфейса.