{"id":9,"date":"2025-10-29T15:38:23","date_gmt":"2025-10-29T07:38:23","guid":{"rendered":"http:\/\/kwitsukasa.top:48088\/?p=9"},"modified":"2025-10-30T13:43:23","modified_gmt":"2025-10-30T05:43:23","slug":"%e4%bd%bf%e7%94%a8nest-js%e4%b8%8etypeorm%e6%90%ad%e5%bb%banode%e6%9c%8d%e5%8a%a1","status":"publish","type":"post","link":"https:\/\/blog.kwitsukasa.top\/?p=9","title":{"rendered":"\u4f7f\u7528Nest.js\u4e0eTypeORM\u642d\u5efaNode\u670d\u52a1"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u5b98\u65b9\u6587\u6863<\/h2>\n\n\n\n<p><strong>Nest <\/strong><a href=\"https:\/\/www.nestjs.com.cn\/\"><strong>https:\/\/www.nestjs.com.cn\/<\/strong><\/a><\/p>\n\n\n\n<p><strong>TypeOrm <\/strong><a href=\"https:\/\/typeorm.bootcss.com\/\"><strong>https:\/\/typeorm.bootcss.com\/<\/strong><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u9879\u76eedemo<\/h2>\n\n\n\n<p><a href=\"https:\/\/github.com\/KwiTsukasa\/starlight-blog-api.git\">https:\/\/github.com\/KwiTsukasa\/starlight-blog-api.git<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1.\u73af\u5883\u51c6\u5907<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1-1.\u5168\u5c40\u5b89\u88c5<code>@nestjs\/cli<\/code>\u5e76\u521d\u59cb\u5316<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>npm i -g @nestjs\/cli\nnest new project-name<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">**\u9879\u76ee\u76ee\u5f55\u7ed3\u6784**<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/kwitsukasa.top:48088\/wp-content\/uploads\/2025\/10\/bcf0549a-16eb-43cd-a2a0-26e23e50a1db.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"619\" height=\"382\" data-original=\"http:\/\/kwitsukasa.top:48088\/wp-content\/uploads\/2025\/10\/bcf0549a-16eb-43cd-a2a0-26e23e50a1db.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-12\"  sizes=\"auto, (max-width: 619px) 100vw, 619px\" \/><\/div><\/figure>\n\n\n\n<p><strong>main.ts\u662f\u9879\u76ee\u7684\u5165\u53e3\u6587\u4ef6.<\/strong><\/p>\n\n\n\n<p><strong>xxx.module.ts\u662f\u6a21\u5757\u6587\u4ef6\u7684\u5165\u53e3.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/kwitsukasa.top:48088\/wp-content\/uploads\/2025\/10\/66a0ba53-7a5d-4d1d-8d24-ab07f74f2521.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"386\" height=\"216\" data-original=\"http:\/\/kwitsukasa.top:48088\/wp-content\/uploads\/2025\/10\/66a0ba53-7a5d-4d1d-8d24-ab07f74f2521.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-11\"  sizes=\"auto, (max-width: 386px) 100vw, 386px\" \/><\/div><\/figure>\n\n\n\n<p><strong>xxx.service.ts\u662f\u6a21\u5757\u7684\u670d\u52a1\u5c42\u6587\u4ef6,\u63d0\u4f9b\u6a21\u5757\u7684\u5185\u7f6e\u65b9\u6cd5,\u9700\u8981\u5728module\u5165\u53e3\u6587\u4ef6\u6ce8\u5165.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/kwitsukasa.top:48088\/wp-content\/uploads\/2025\/10\/529dcac4-4a94-4ed9-bcf0-aae44c8a78cd.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"384\" height=\"204\" data-original=\"http:\/\/kwitsukasa.top:48088\/wp-content\/uploads\/2025\/10\/529dcac4-4a94-4ed9-bcf0-aae44c8a78cd.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-13\"  sizes=\"auto, (max-width: 384px) 100vw, 384px\" \/><\/div><\/figure>\n\n\n\n<p><strong>xxx.controller.ts\u662f\u63d0\u4f9b\u6a21\u5757\u7684\u63a5\u53e3\u6587\u4ef6.\u540c\u4e0a\u9700\u8981\u5728module\u5165\u53e3\u6587\u4ef6\u6ce8\u5165.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2.\u5b89\u88c5<code>typeOrm<\/code>\u5e76\u521d\u59cb\u5316\u6570\u636e\u5e93<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install typeorm --save\nnpm install @types\/node --save\nnpm install mysql --save<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2-1.\u65b0\u5efaEntity\u5b9e\u4f53\u6620\u5c04\u7c7b,\u6620\u5c04\u6570\u636e\u5e93\u6570\u636e<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import {\n\u00a0 Entity,\/\/\u5b9e\u4f53\u6ce8\u89e3\n\u00a0 PrimaryGeneratedColumn,\/\/\u4e3b\u952e\u5217\u6ce8\u89e3\n\u00a0 Column,\/\/\u5217\u6ce8\u89e3\n\u00a0 CreateDateColumn,\/\/\u521b\u5efa\u65e5\u671f\u7c7b\u6ce8\u89e3\n\u00a0 UpdateDateColumn,\/\/\u66f4\u65b0\u65e5\u671f\u7c7b\u6ce8\u89e3\n} from 'typeorm';\n\u200b\n\/\/\u6807\u8bb0\u6b64\u7c7b\u4e3a\u6570\u636e\u5e93\u5b9e\u4f53\u7c7b\n@Entity()\nexport class BlogUser {\n \u00a0\/\/\u6807\u8bb0\u6b64\u7c7b\u6210\u5458\u4e3a\u4e3b\u952e\u5217\n\u00a0 @PrimaryGeneratedColumn()\n\u00a0 user_id: number;\n\u200b\n    \/\/\u6807\u8bb0\u6b64\u7c7b\u6210\u5458\u4e3a\u5217\n\u00a0 @Column()\n\u00a0 user_name: string;\n\u200b\n\u200b\n\u00a0 @Column({ select: false })\n\u00a0 user_psd: string;\n\u200b\n\u200b\n\u00a0 @Column()\n\u00a0 user_email: string;\n\u200b\n\u200b\n\u00a0 @Column()\n\u00a0 user_profile: string;\n\u200b\n\u200b\n\u00a0 @Column()\n\u00a0 user_img: string;\n\u200b\n\u200b\n\u00a0 @Column()\n\u00a0 user_links: string;\n\u200b\n    \/\/\u6807\u8bb0\u6b64\u7c7b\u6210\u5458\u4e3a\u521b\u5efa\u65e5\u671f\u5217\n\u00a0 @CreateDateColumn()\n\u00a0 create_time: Date;\n\u200b\n    \/\/\u6807\u8bb0\u6b64\u7c7b\u6210\u5458\u4e3a\u66f4\u65b0\u65e5\u671f\u5217\n\u00a0 @UpdateDateColumn()\n\u00a0 update_time: Date;\n\u200b\n\u200b\n\u00a0 @Column()\n\u00a0 is_deleted: boolean;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2-2.\u8fde\u63a5\u6570\u636e\u5e93<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import { Module } from '@nestjs\/common';\nimport { AppController } from '.\/app.controller';\nimport { AppService } from '.\/app.service';\nimport { TypeOrmModule } from '@nestjs\/typeorm';\n\u200b\n@Module({\n\u00a0 imports: &#91;\n\u00a0 \u00a0 TypeOrmModule.forRoot({\n\u00a0 \u00a0 \u00a0 type: 'mysql',\/\/\u6570\u636e\u5e93\u7c7b\u578b\n\u00a0 \u00a0 \u00a0 host: 'localhost',\n\u00a0 \u00a0 \u00a0 port: 3306,\/\/\u6570\u636e\u5e93\u7aef\u53e3\n\u00a0 \u00a0 \u00a0 username: 'root',\/\/\u6570\u636e\u5e93\u7528\u6237\u540d\n\u00a0 \u00a0 \u00a0 password: 'root',\/\/\u6570\u636e\u5e93\u5bc6\u7801\n\u00a0 \u00a0 \u00a0 database: 'myblog',\/\/\u6570\u636e\u5e93\n\u00a0 \u00a0 \u00a0 entities: &#91;__dirname + '\/**\/*.entity.js'],\/\/\u5b9e\u4f53\u8def\u5f84\n\u00a0 \u00a0 }),\n\u00a0 ],\n\u00a0 controllers: &#91;AppController],\n\u00a0 providers: &#91;AppService],\n})\nexport class AppModule {}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">3.\u521b\u5efacontroller\u63a5\u53e3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3-1.\u6309\u6a21\u5757\u5f00\u53d1,\u521b\u5efauser\u6587\u4ef6\u5939\u5b58\u653euser\u6a21\u5757\u6587\u4ef6<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/kwitsukasa.top:48088\/wp-content\/uploads\/2025\/10\/6b056b7c-bafa-4df4-95e7-f8eb563ca87b.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"207\" height=\"94\" data-original=\"http:\/\/kwitsukasa.top:48088\/wp-content\/uploads\/2025\/10\/6b056b7c-bafa-4df4-95e7-f8eb563ca87b.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-14\"\/><\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">3-2.\u5305\u542b\u4e0a\u8ff0\u4e2d\u4e00\u4e2a\u5b8c\u6574\u6a21\u5757\u9700\u8981\u7684\u56db\u4e2a\u6587\u4ef6<\/h3>\n\n\n\n<p><strong>1.module.ts \u6a21\u5757\u6587\u4ef6\u7684\u5165\u53e3\u6587\u4ef6<\/strong><\/p>\n\n\n\n<p><strong>2.entity.ts \u6a21\u5757\u6620\u5c04\u6570\u636e\u5e93\u5b9e\u4f53\u7c7b\u6587\u4ef6<\/strong><\/p>\n\n\n\n<p><strong>3.service.ts \u6a21\u5757\u5185\u7f6e\u65b9\u6cd5\u5b9e\u73b0\u6587\u4ef6<\/strong><\/p>\n\n\n\n<p><strong>4.controller.ts \u6a21\u5757\u5185\u7f6e\u63a5\u53e3\u5b9e\u73b0\u6587\u4ef6<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3-3.\u7f16\u5199service\u548ccontroller\u6587\u4ef6,\u5e76\u5728module\u6587\u4ef6\u5185\u6ce8\u5165\u5e76\u629b\u51famodule\u6587\u4ef6<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1.\u5b9e\u73b0\u6b64\u6a21\u5757\u9700\u8981\u7684\u65b9\u6cd5<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>import { Injectable } from '@nestjs\/common';\nimport { InjectRepository } from '@nestjs\/typeorm';\nimport { Repository } from 'typeorm';\nimport { BlogUser } from '.\/user.entity';\n\u200b\n@Injectable() \/\/\u58f0\u660e\u8fd9\u662f\u4e00\u4e2a\u4f9d\u8d56\u6ce8\u5165\u7c7b\nexport class UserService {\n\u00a0 constructor(\n\u00a0 \u00a0 @InjectRepository(BlogUser) \/\/\u58f0\u660e\u8fd9\u662fBlogUser\u5b9e\u4f53\u7684\u6570\u636e\u5e93\u6ce8\u5165\u6620\u5c04\u6210\u5458\n\u00a0 \u00a0 private readonly userRepository: Repository&lt;BlogUser>,\n\u00a0 ) {}\n\u200b\n    \/\/\u4f7f\u7528\u7528\u6237\u540d\u67e5\u8be2\u5355\u4e2a\u7528\u6237\n\u00a0 async find(username: string) {\n\u00a0 \u00a0 const user = await this.userRepository\n\u00a0 \u00a0 \u00a0 .createQueryBuilder('user')\/\/\u521b\u5efa\u4e00\u4e2a\u6570\u636e\u5e93\u67e5\u8be2\u8fde\u63a5\n\u00a0 \u00a0 \u00a0 .addSelect('user.user_psd')\/\/\u67e5\u8be2\u7b26\u5408\u6761\u4ef6\u7684\u7528\u6237\u5bc6\u7801\n\u00a0 \u00a0 \u00a0 .where('user.user_name = :user_name', {\n\u00a0 \u00a0 \u00a0 \u00a0 user_name: `${username}`,\n\u00a0 \u00a0 \u00a0 })\n\u00a0 \u00a0 \u00a0 .getOne();\/\/\u8fd4\u56de\u4e00\u6761\u6570\u636e\n\u00a0 \u00a0 return user;\n\u00a0 }\n\u200b\n    \/\/\u65b0\u589e\u7528\u6237\n\u00a0 async save(user){\n\u00a0 \u00a0 const link = await this.userRepository.create(user);\n\u00a0 \u00a0 const save = await this.userRepository.save(link);\n\u00a0 \u00a0 return save;\n\u00a0 }\n\u200b\n\u200b\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2.\u5b9e\u73b0\u6b64\u6a21\u5757\u63a5\u53e3<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>import {\n\u00a0 Controller,\n\u00a0 Get,\n\u00a0 Post,\n\u00a0 Body,\n\u00a0 Session,\n\u00a0 Req,\n\u00a0 Res,\n\u00a0 HttpException,\n\u00a0 HttpStatus,\n} from '@nestjs\/common';\nimport { ToolsService } from 'src\/utils\/tool.service';\nimport { UserService } from '.\/user.service';\n\u200b\n\u200b\n@Controller('user') \/\/\u58f0\u660e\u8fd9\u662f\u4e00\u4e2aController\u5c42,\u5e76\u58f0\u660e\u6b64\u6a21\u5757\u63a5\u53e3\u524d\u7f00\u4e3auser\nexport class UserController {\n\u00a0 constructor(\n\u00a0 \u00a0 private readonly toolsService: ToolsService,\n\u00a0 \u00a0 private readonly userService: UserService,\n\u00a0 ) {} \/\/\u6ce8\u5165\u670d\u52a1,\u5728module\u6587\u4ef6\u5185\u5f15\u5165\u7684service\u90fd\u9700\u8981\u5728\u6784\u9020\u65b9\u6cd5\u5185\u521d\u59cb\u5316,\u5426\u5219\u65e0\u6cd5\u4f7f\u7528\n\u200b\n\u200b\n\u00a0 @Get('authcode') \/\/\u5f53\u8bf7\u6c42\u8be5\u63a5\u53e3\u65f6\uff0c\u8fd4\u56de\u4e00\u5f20\u968f\u673a\u56fe\u7247\u9a8c\u8bc1\u7801\n\u00a0 async getCode(@Req() req, @Res() res) {\n\u00a0 \u00a0 const svgCaptcha = await this.toolsService.captche(); \/\/\u521b\u5efa\u9a8c\u8bc1\u7801\n\u00a0 \u00a0 req.session.code = svgCaptcha.text; \/\/\u4f7f\u7528session\u4fdd\u5b58\u9a8c\u8bc1\uff0c\u7528\u4e8e\u767b\u9646\u65f6\u9a8c\u8bc1\n\u00a0 \u00a0 res.type('image\/svg+xml'); \/\/\u6307\u5b9a\u8fd4\u56de\u7684\u7c7b\u578b\n\u00a0 \u00a0 res.send(svgCaptcha.data); \/\/\u7ed9\u9875\u9762\u8fd4\u56de\u4e00\u5f20\u56fe\u7247\n\u00a0 }\n\u200b\n\u200b\n\u00a0 @Post('\/register') \/\/\u6ce8\u518c\u63a5\u53e3\n\u00a0 async register(@Body() body, @Session() session, @Res() res) {\n\u00a0 \u00a0 const { code } = body; \/\/\u7528\u6237\u8f93\u5165\u7684\u9a8c\u8bc1\u7801\n \u00a0 \u00a0\/\/\u5224\u65ad\u751f\u6210\u9a8c\u8bc1\u7801\u548c\u7528\u6237\u8f93\u5165\u9a8c\u8bc1\u7801\u662f\u5426\u4e00\u81f4\n\u00a0 \u00a0 if (code?.toUpperCase() === session.code?.toUpperCase()) {\n \u00a0 \u00a0 \u00a0\/\/\u4f7f\u7528service\u5c42\u67e5\u8be2\u65b9\u6cd5\u67e5\u8be2\u5bf9\u5e94\u7528\u6237\n\u00a0 \u00a0 \u00a0 const query = await this.userService.find(body.username);\n \u00a0 \u00a0 \u00a0\/\/\u5982\u679c\u67e5\u5230\u5219\u629b\u51fa\u9519\u8bef\n\u00a0 \u00a0 \u00a0 if (query) {\n\u00a0 \u00a0 \u00a0 \u00a0 throw new HttpException('\u7528\u6237\u540d\u5df2\u5b58\u5728', HttpStatus.BAD_REQUEST);\n\u00a0 \u00a0 \u00a0 } else {\n \u00a0 \u00a0 \u00a0 \u00a0\/\/\u65b0\u589e\u7528\u6237\n\u00a0 \u00a0 \u00a0 \u00a0 const save = await this.userService.save({\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 user_name: body.username,\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 user_psd: body.password,\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 user_email: body.useremail,\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 user_profile: '',\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 user_img: '',\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 user_links: '',\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 is_deleted: 0,\n\u00a0 \u00a0 \u00a0 \u00a0 });\n \u00a0 \u00a0 \u00a0 \u00a0\/\/\u65b0\u589e\u6210\u529f\u4f1a\u8fd4\u56de\u6570\u636e,\u5982\u679c\u6709\u6570\u636e\u5219\u8fd4\u56de\u524d\u7aef200\n\u00a0 \u00a0 \u00a0 \u00a0 if (save) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 const retn = this.toolsService.res(200, '\u6ce8\u518c\u6210\u529f', save);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 res.send(retn);\n\u00a0 \u00a0 \u00a0 \u00a0 } else {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/\u65e0\u6570\u636e\u8fd4\u56de\u9519\u8bef\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 throw new HttpException('\u6ce8\u518c\u5931\u8d25', HttpStatus.BAD_REQUEST);\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 } else {\n \u00a0 \u00a0 \u00a0\/\/\u9a8c\u8bc1\u7801\u5224\u65ad\u9519\u8bef\n\u00a0 \u00a0 \u00a0 throw new HttpException('\u9a8c\u8bc1\u7801\u9519\u8bef', HttpStatus.BAD_REQUEST);\n\u00a0 \u00a0 }\n\u00a0 }\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3.\u5c06\u6587\u4ef6\u5728module.ts\u6587\u4ef6\u5185\u5f15\u5165\u5e76\u629b\u51famodule.ts<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>import { Module } from '@nestjs\/common';\nimport { TypeOrmModule } from '@nestjs\/typeorm';\nimport { UserController } from '.\/user.controller';\nimport { UserService } from '.\/user.service';\nimport { BlogUser } from '.\/user.entity';\nimport { ToolsService } from 'src\/utils\/tool.service';\n\u200b\n\u200b\n@Module({\n\u00a0 imports: &#91;TypeOrmModule.forFeature(&#91;BlogUser])],\n\u00a0 controllers: &#91;UserController],\n\u00a0 providers: &#91;UserService, ToolsService],\n\u00a0 exports: &#91;UserService],\n})\nexport class UserModule {}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.\u5728app.module.ts\u9879\u76ee\u6a21\u5757\u5165\u53e3\u6587\u4ef6\u4e2d\u4e2d\u5f15\u5165\u81ea\u5b9a\u4e49\u6a21\u5757<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>import { Module } from '@nestjs\/common';\nimport { AppController } from '.\/app.controller';\nimport { AppService } from '.\/app.service';\nimport { TypeOrmModule } from '@nestjs\/typeorm';\nimport { UserModule } from '.\/user\/user.module';\n\u200b\n\u200b\n@Module({\n\u00a0 imports: &#91;\n\u00a0 \u00a0 ConfigModule.forRoot(),\n\u00a0 \u00a0 TypeOrmModule.forRoot({\n\u00a0 \u00a0 \u00a0 type: 'mysql',\n\u00a0 \u00a0 \u00a0 host: 'localhost',\n\u00a0 \u00a0 \u00a0 port: 3306,\n\u00a0 \u00a0 \u00a0 username: 'root',\n\u00a0 \u00a0 \u00a0 password: 'root',\n\u00a0 \u00a0 \u00a0 database: 'myblog',\n\u00a0 \u00a0 \u00a0 entities: &#91;__dirname + '\/**\/*.entity.js'],\n\u00a0 \u00a0 }),\n\u00a0 \u00a0 UserModule, \/\/\u5f15\u5165\u81ea\u5b9a\u4e49\u6a21\u5757\n\u00a0 ],\n\u00a0 controllers: &#91;AppController],\n\u00a0 providers: &#91;AppService],\n})\nexport class AppModule {}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4.\u542f\u52a8node\u670d\u52a1<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>nest start<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5b98\u65b9\u6587\u6863 Nest https:\/\/www.nestjs.com.cn\/ TypeOrm https:\/\/ty [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[3],"class_list":["post-9","post","type-post","status-publish","format-standard","hentry","category-node","tag-node"],"_links":{"self":[{"href":"https:\/\/blog.kwitsukasa.top\/index.php?rest_route=\/wp\/v2\/posts\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.kwitsukasa.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.kwitsukasa.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.kwitsukasa.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.kwitsukasa.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9"}],"version-history":[{"count":2,"href":"https:\/\/blog.kwitsukasa.top\/index.php?rest_route=\/wp\/v2\/posts\/9\/revisions"}],"predecessor-version":[{"id":27,"href":"https:\/\/blog.kwitsukasa.top\/index.php?rest_route=\/wp\/v2\/posts\/9\/revisions\/27"}],"wp:attachment":[{"href":"https:\/\/blog.kwitsukasa.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.kwitsukasa.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.kwitsukasa.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}