Тссс! Длинная фраза.
Как фронтенд-разработчик, мы обычно больше всего контактируем с серверной частью — это стыковка интерфейса. Так как же коллеги из back-end пишут интерфейс для наших студентов front-end, чтобы получать данные из базы данных и выполнять какие-то причудливые функции? Сегодня мы будем использоватьKoa2 & mySql
Чтобы создать внутренний сервер, напишите свой собственныйapi
китайская мечта!
предисловие
Для некоторых партнеров по фронтенд-разработке бэкенд-разработка может быть незнакомой областью, ведь работа с фронтендом сейчас тяжелая (как я могу изучить утку бэкенд-разработки!). к счастьюNode.js
Это оружие позволяет нам внедрять некоторые внутренние технологии на основе наших существующих навыков работы с интерфейсом, что также снижает порог для нас, чтобы начать работу с серверной частью.
Сяоке (дон) любовь (кси), которую я вам сегодня представлю, является моим последним проектом (этот проект был созданkoa2+mysql + pm2в качестве фоновой службы)Koa2 & MySQL & PM2Базовый шаблон. Цель состоит в том, чтобы позволить нашим внешним партнерам напрямую использовать его для разработки интерфейсов и реализации своих мечтаний.
репозиторий кодаGitHub.com/One Billion/Женщины могут…В настоящее время в учебнике рассматривается использование pm2 для запуска службы в среде Windows.
dev
среда для тестирования
Цель
Благодаря этому набору базовых шаблонов быстрая разработкаapi
, чтобы добиться самозавершения внешнего и внутреннего интерфейса. То есть после того, как вы клонируете код, в целях обучения вам нужно только начать писать API.Я уже настроил несколько простых конфигураций.Вы можете написать API самостоятельно, если будете следовать приведенным ниже шагам. Подключайтесь к интерфейсу сами, а потом бей себя.
использовать технологию
- Koa2
- MySql (пожалуйста, убедитесь, что у вас установлена Windows
mysql
, и может начать нормальноmysql
) - PM2 (Убедитесь, что ваши окна установлены
PM2
, и может начать нормальноPM2
)
Руководство по установке программного обеспечения
- MySqlУстановить:blog.CSDN.net/WeChat_4343…
- Установить
wamp
илиphpstudy
Эти два артефакта будут автоматически установлены для васMySql, который в основном удовлетворяет ваше обучение и развитие. Если вы хотите использовать его в производственной среде, я считаю, что в вашей среде уже есть необходимое программное обеспечение. - PM2Установить:nuggets.capable/post/684490…
- выше
PM2
Учебник - это статья, которую я написал в прошлый раз (написание немного тухлое, я больше не могу его читать, ха-ха, ноpm2
Установка очень проста, вы можете посмотреть или найти соответствующие полные руководства на Baidu)
структура кода
Конфигурация среды
использовать этот наборKoa2 & MySQL & PM2
Перед базовым шаблоном необходимо убедиться, что на вашем компьютере установлена
node、mysql、PM2
клонировать код
гит-адрес: чttps://github.com/yigeyi/funnyProject.git
создать базу данных
В файле кода, который я предоставилmysql
построение столаsql
заявление, вам необходимо создатьdev_db
База данных, после создания, выполняет код в файлеdev_db.sql
файл
установка кода
npm i //就这样子,先把node繁重的node_module安装下来,嘿嘿
//如果npm不行,那就试一下 cnpm i
запустить службу
использоватьpm2 start pm2.config.js --only dev
начатьkoa2
Project, когда появится содержимое, как на снимке экрана ниже, подтвердите своеkoa2
Проект стартовал корректно.
В этот момент вы можете использоватьhttp://localhost:3200
Сделать проект доступа (о3200
конфигурация порта, которую я объясню ниже)
Инструкции по настройке
Основной рабочий процесс проекта:pm2 start pm2.config.js --only dev/prod/test
После запуска проекта (вы также можете использоватьnpm run dev/prod/test
),koa2
Различные конфигурации будут выполняться через текущую запущенную среду.config
параметр(app.js
импортировать файл конфигурации), таким образом, используя разные端口
а такжеmysql
Конфигурация параметров (настраивается вconfig
папка, подробности ниже)
введение в конфигурацию app.js
const Koa = require('koa')
const app = new Koa()
const env = process.env.NODE_ENV;
const config = require('./config')
const router = require('./app/router')
...
/*更多的配置可以拉取仓库代码进行查看*/
Конфигурация среды запуска
Конфигурация PM2: pm2.config.js
let startFile = "./app.js"
module.exports = {
apps: [{
name: "prod",
script: startFile,
env: {
"NODE_ENV": "production"
}
}, {
// 测试环境
name: "test",
script: startFile,
env: {
"NODE_ENV": "test"
}
}, {
// 开发环境
name: "dev",
script: startFile,
env: {
"NODE_ENV": "development"
}
}
]
}
Конфигурация параметров среды: /conf/config.*.js
/*conf.dev.js*/
const conf = {
port: 3200, //启动端口 ,这个根据你电脑环境的实际情况来配置
base_url: '',// 当前api服务器的域名
mysql: { // mysql数据库信息
host: 'localhost',
port: '3306',
database: 'dev_db', //你可以修改你的数据库名字
user: 'root', //数据库登录账户 你寄己来
password: '', //数据库登录密码 我就不知道你的是啥啦
charset: 'UTF8mb4'
}
}
module.exports = conf;
Путем настройки различныхconfig
После этого, когда мы проходимpm2 start pm2.config.js --only dev/prod/test
,koa
будет основываться на нашемpm2.config.js
настроен вNODE_ENV
Чтобы определить, какова текущая операционная среда, и передать/config/index.js
Zhonglai использует разные порты конфигурации и параметры
Конфигурация базы данных
Путь к файлу конфигурации:/db/mysql.js
const db = require("mysql");
const config = require('../config').mysql;
const client = function () {}
var pool = db.createPool({
host: config.host,
port: config.port,
user: config.user,
password: config.password,
database: config.database,
charset: 'UTF8mb4'
});
конфигурация маршрутизации
Конфигурация маршрутизации:/router/index.js
/*router/index.js*/
const router = require('koa-router')()
let app = require('./v1.js')
//接口映射
router.use('/api/app', app.routes(), app.allowedMethods())
// vue history 设置
router.get('*', async(ctx, next)=>{
return await ctx.render('index', {})
})
//返回注册路由
module.exports = router
Создание модели базы данных (Модели)
Model
главным образом рассказатьsequelize
как отображать таблицы базы данных,
sequelize.define(modelName, attributes, [options]) -> ModalЭтот метод экземпляра используется для определения новогоmodel
(Модель).model
Эквивалентно таблице в базе данных, объект не может быть создан через конструктор, а только черезsequelize.define()
илиsequelize.import()
создание метода
Второй параметр — указать имя столбца и тип данных, если это первичный ключ, то его нужно указать более подробно. Третий параметр — дополнительная настройка
конкретныйsequelize
Конфигурация для использования может относиться ккитайский документучиться
//eg:
/*models\sequelize-model\test.js*/
module.exports = function(sequelize, DataTypes) {
return sequelize.define('test', {
id: {
type: DataTypes.INTEGER(11).UNSIGNED,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
nick_name: {
type: DataTypes.INTEGER(11),
allowNull: false
},
}, {
tableName: 'test',
timestamps: false
});
};
существуетModel
Код, написанный в, на самом деле с намиmysql
Структура таблицы, написанная в mysql, одинакова, но выражается на разных языках, то есть, если вы добавляете таблицу или поле в mysql, вам также необходимо добавить таблицу или поле в соответствующийmodel
для обновления связанных полей. Существуют также плагины (промежуточное программное обеспечение), которые могут автоматически сопоставлять структуру таблицы базы данных с моделью, но при первом использовании я обнаружил небольшую проблему, поэтому не стал его использовать.
/*mysql 创建表结构*/
CREATE TABLE `test` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nick_name` VARCHAR(50) NULL DEFAULT '',
PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=5
;
Напишите интерфейс!
Интерфейс написан, и когда мы получим доступ к интерфейсу, он будет в
/router/v1
Найдите соответствующее имя маршрутизации в , а затем получите доступ к нашему соответствующему адресу интерфейса контроллера для обработки бизнес-процессов.
router/v1
Унифицированное сопоставление интерфейса упаковки
/*router/v1*/
//业务接口
const router = require('koa-router')()
// 引入不同控制器接口文件
// 根据不同的业务模块我们可以创建不同的controller,我们可以把相同模块的接口写在相同的controller中,并通过此处进行引入,例如 test1
const test = require('../controller/test')
const test1 = require('../controller/test1')
const test2 = require('../controller/test2')
//接口映射
//接口访问地址http://localhost:port/api/app/test
///api/app这一段已经在index.js中配置了前缀,所以在写接口的时候需要加上api/app/
//controller
router.post('/test',test.getTest)
router.post('/createData',test.createData)
//controller1
router.post('/test1',test1.getTest)
//controller和service分离部分
router.post('/test2',test2.getTest)
module.exports = router
Контроллер:controller/*.js
/*controller/test.js*/
const models = require('../models')
const {
joi,
validateParams
} = require('../base/controller.js')
module.exports = {
//获取数据库数据
async getTest(ctx){
let data = {
tip: '你安装了数据库就可以把上面注释打开'
}
return ctx.output({data:data},'获取成功',0)
},
async createData(ctx){
//参数验证
//通过获取post传递过来的参数
//再使用模型把数据插入数据库
const schema = joi.object().keys({
nick_name: joi.string().required()
})
validateParams(ctx.input, schema)
let nick_name = ctx.input.nick_name
let parmas = {
nick_name: nick_name
}
let res = await models.test.create(parmas)
if(res){
return ctx.output({},'添加成功',0)
}
// let data = {
// tip: '你安装了数据库就可以把上面注释打开'
// }
// return ctx.output({data:data},'获取成功',0)
}
}
До сих пор, после прохождения вышеуказанной серии конфигураций и резюме кода, мы можем пройтиpostman
Проверим, удачен ли интерфейс!
Разделение контроллера контроллера и сервисного уровня
Когда наш бизнес сложен, мы не хотим, чтобы логика обработки базы данных смешивалась с нашей обычной бизнес-логикой, в это время мы можем разделить операции обработки базы данных и поместить их в однуservice
слой, затем контроллерcontroller
просто обрабатывать нашу бизнес-логику
Конкретная операция: путем добавленияservice
папку, а затем создайте другуюservice
файлы модулей, например.serviceTest2.js
, при этом ставяtest2
Операции, связанные с операциями базы данных, извлекаются вserviceTest2.js
Таким образом, мы можем четко знать, что делают наши различные бизнес-уровни, и нам также удобно поддерживать это.
/*app\controller\test2.js*/
//这个文件演示 控制器和service层分离
const serviceTest = require('../service/v1/serviceTest2.js')
module.exports = {
//获取数据库数据
async getTest(ctx){
let res = await serviceTest.getTest()
return ctx.output({data:res},'获取成功',0)
}
}
/*app\service\v1\serviceTest2.js*/
const models = require('../../models')
module.exports = {
//获取数据库数据
async getTest(ctx){
let res = await models.test.findOne({
where: {
id: 1
}
})
let data = {
name: res.dataValues.nick_name
}
// let data = {
// tip: '这里从控制器抽离出来的操作数据库的东西,你如果安装了mysql,可以打开上面的注释'
// }
return data
}
}
PM2 больше операций
pm2 restart pm2.config.js --only dev/prop/test //重启服务
pm2 log // 查看日志
pm2 kill //杀死进程
Официальная документация: https://pm2.keymetrics.io/docs/usage/quick-start/
напиши в конце
- Вышеупомянутая статья — это то, над чем я работал последние два дня в
koa2
Набор шаблонов кода, извлеченных из проекта, каждому нужно только клонировать код и убедиться, что необходимое программное обеспечение установлено на компьютере и может быть запущено.koa2
Запустите проект и напишите API.
- Это статья для простого обмена начального уровня. Если есть какая-либо ошибка, я надеюсь, что вы поможете ее исправить, большое спасибо.
- Если вы думаете, что все в порядке, я надеюсь, вы можете дать мне одино звезда,Большое Вам спасибо