说明:
nodejs需要操作数据库时,需要接入ORM中间件时,可以根据模型控制操作数据库
1.安装
npm install typeorm --save
npm install reflect-metadata --save
//安装对应数据库的驱动
npm install mysql --save
2.目录结构
├── entity
│ └── Code.ts //数据库实体类
├── index.ts //启动文件
├── routes
│ ├── content.ts //路由
├── services
│ ├── code.ts //调用-增删改查(业务逻辑)
3.配置
tsconfig.json
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
4.启动 index.ts
//引用库
import { createConnection } from "typeorm";
import "reflect-metadata";
//定义全局变量
declare global{
namespace NodeJS{
interface Global{
typeorm
}
}
}
//使用中间件
app.use(async (ctx, next)=>{
if(!global.typeorm){ //判断实例是否存在,如果不存在,则初始化
//下方替换成自己的数据库连接配置
global.typeorm = await createConnection({
type: "mysql",
host: global.db_host,
port: global.db_port,
username: global.db_user,
password: global.db_pwd,
database: 'xxx',
entities: [__dirname + "/entity/*.ts"],//遍历entity目录所有的实体类
synchronize: false,
logging: false
})
}
await next();
});
5.新建实体类 code.ts
import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";
//对应数据库表名,默认是驼峰对应下划线 CodeRecord=>code_record
//如果表明和类名无法应对,使用name属性和表名一致
//例如:@Entity({name:'mytable'}
@Entity()
export class CodeRecord {
//自增主键
@PrimaryGeneratedColumn()
id: number;
//普通列,数据库类型 text(长文本)需要标注
@Column({type:"text",name:'code'})
code: string;
//普通列 数据库类型为double,实体类任然是number类型,需要标注
@Column("double")
views: number;
//更多类型参考 https://gitee.com/hacker_xwj/typeorm/blob/master/docs/zh_CN/entities.md#%E5%85%B7%E6%9C%89%E7%94%9F%E6%88%90%E5%80%BC%E7%9A%84%E5%88%97
}
6.查改增删
import {getManager} from "typeorm";
import { CodeRecord } from "../entity/Code";
//获取列表
const getCode = async () => {
//启动程序已经初始化数据库连接,直接调用getManager方法拉到数据库实例
const codeRepository = getManager().getRepository(CodeRecord);
// 查找
const code = await codeRepository.find();
return code;
}
//编辑数据
const editCode = async (cid: string) => {
const codeRepository = getManager().getRepository(CodeRecord);
let codeRecord = await codeRepository.findOne(cid);
codeRecord.code = "hello,my friend";
let r = await codeRepository.save(codeRecord);
return r;
}
//添加数据
const addCode = async () =>{
const codeRepository = getManager().getRepository(CodeRecord);
let codeRecord = new CodeRecord();
codeRecord.code = "new Record"
let r = await codeRepository.save(codeRecord)
return r;
}
//删除数据
const removeCode = async (cid: string) =>{
const codeRepository = getManager().getRepository(CodeRecord);
let codeRecord = await codeRepository.findOne(cid);
let r = await codeRepository.remove(codeRecord)
return r;
}
module.exports = { getCode,editCode,addCode,removeCode }
网友评论