用Decorator實現依賴注入,支持vscode Debug

最近閒來無事,突發奇想,也順便練練手,因而就萌生了,可否用typescript的decorator寫一個Nodejs SpringMVC,經過依賴注入,自動實現文件加載,實例化等。而後就有了這個項目。 該項目支持:javascript

依賴注入Controller ,Service 注入GET/POST/PUT/DELETE/PATCH等rest方法 解析rest api的參數,例如RequestParam 上傳文件支持Multer 支持在vscode裏面直接debug typescript 的代碼 想學習如何debug typescript代碼的同窗能夠留意一下,真的很好用。java

easy-node-ioc

用 Typescript 的裝飾器實現依賴注入,就像咱們使用 Spring MVC 框架同樣,web 框架使用的是 Expressnode

安裝

npm i easy-node-ioc --save-dev
複製代碼

快速開始使用

git clone https://github.com/chenkang084/easy-node-ioc.git
npm i
NODE_ENV=development npx ts-node demo/App.ts
複製代碼

執行完以上命令,將在命令行輸出 Example app has started,代碼項目已正常經啓動起來了,嘗試訪問 http://localhost:9001/api/test/index ,頁面將返回 OK。git

使用

1.建立 Controller

import { Controller} from 'easy-node-ioc';
@Controller('/test')
class TestControl {
    ...
}
複製代碼

2.建立 Service

import { Service } from 'easy-node-ioc';
@Service('')
class TestService {
    ...
}
複製代碼

3.將 Service 注入到 Controller 中

import { Autowired,Controller } from 'easy-node-ioc';
@Controller('/test')
class TestControl {
    @Autowired
    testService: TestService;
    ...
}
複製代碼

4.在 Controller 中定義 Rest API,例如 GET,POST,PUT,DELETE,PATCH

import { Autowired,Controller,GET,RequestParam } from 'easy-node-ioc';
@Controller('/test')
class TestControl {
    @Autowired
    testService: TestService;
    @Get('/index')
    index(@RequestParam('age') age: number, req: Request, res: Response) {
        console.log('index method');
        this.dbService.queryDb();

        res.status(200).send(this.testService.queryDb());
    }
    ...
}
複製代碼

5.定義 App,添加 ComponentScan,添加 Bootstrap 註解到 App 類

import { Bootstrap, ComponentScan } from '../';
@ComponentScan(join(__dirname, './Controller.ts'))
@Bootstrap
class App {
  constructor() {}

  app = express();

  main() {
    const server = http.createServer(this.app);

    server.listen(9001, function() {
      console.log('Example app listening at http://%s:%s');
    });
  }
}
複製代碼

第 5 步是很是關鍵的,ComponentScan 註解負責告訴easy-node-ioc去指定目錄讀取 js/ts 文件,在讀取文件的過程當中,根據 Decorator 定義,向容器中添加對應實例,在 Boostrap 方法裏面根據文件依賴,去容器中獲取已經實例化的對象(若是對象沒有實例化,就當即實例化),等全部的依賴都注入完成,執行main方法。github

測試

npm test 本項目已經寫了一些基礎的 test case,能夠在項目路徑下的 tests 目錄查看。web

Debug

.vscode目錄的 launch.json 文件中,已經配置好了 debug 相關的代碼,你能夠直接在vscode中使用 F5 進行 debug,這樣更方便你瞭解項目是如何實現的。typescript

其餘

若是你對decorator比較感興趣,能夠查看相關資料,瞭解 decorator 如何使用。express

我創建了一個微信羣,若是你對這個小工具感興趣,能夠加羣,或者若是你有什麼問題,也能夠進羣交流。npm

相關文章
相關標籤/搜索