最近閒來無事,突發奇想,也順便練練手,因而就萌生了,可否用typescript的decorator寫一個Nodejs SpringMVC,經過依賴注入,自動實現文件加載,實例化等。而後就有了這個項目。 該項目支持:javascript
依賴注入Controller ,Service 注入GET/POST/PUT/DELETE/PATCH等rest方法 解析rest api的參數,例如RequestParam 上傳文件支持Multer 支持在vscode裏面直接debug typescript 的代碼 想學習如何debug typescript代碼的同窗能夠留意一下,真的很好用。java
用 Typescript 的裝飾器實現依賴注入,就像咱們使用 Spring MVC 框架同樣,web 框架使用的是 Express。node
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
import { Controller} from 'easy-node-ioc';
@Controller('/test')
class TestControl {
...
}
複製代碼
import { Service } from 'easy-node-ioc';
@Service('')
class TestService {
...
}
複製代碼
import { Autowired,Controller } from 'easy-node-ioc';
@Controller('/test')
class TestControl {
@Autowired
testService: TestService;
...
}
複製代碼
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());
}
...
}
複製代碼
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
在.vscode
目錄的 launch.json 文件中,已經配置好了 debug 相關的代碼,你能夠直接在vscode
中使用 F5 進行 debug,這樣更方便你瞭解項目是如何實現的。typescript
若是你對decorator
比較感興趣,能夠查看相關資料,瞭解 decorator 如何使用。express
我創建了一個微信羣,若是你對這個小工具感興趣,能夠加羣,或者若是你有什麼問題,也能夠進羣交流。npm