我有一個使用Express.js構建的Node.js服務器,並使用TypeScript編碼。下面是get調用的對我的服務器的代碼段:我可以在Node.js/Express中動態導入TypeScript模塊嗎?
server.ts
private get(req: Request, res: Response, next: NextFunction, objectName: string) {
var DatabaseObject = require("./models/" + objectName + ".js")(this.orm, Sequelize.DataTypes);
var Transform = require("./routes/" + objectName + ".js");
var transform = new Transform();
// ...
console.log(req.query["columns"]);
console.log(transform.columnWhitelist);
console.log(transform);
// ...
if (transform.columnWhitelist) {
console.log("Column Whitelist Exists.");
}
// ...
}
它動態地加載數據庫對象Sequelize模塊所請求的URL,然後嘗試加載與規則打字稿模塊什麼可以選擇列,哪些列可以查詢的,等等。這裏是我的規則集類的開頭:
account.ts
export default class Transform {
static columnWhitelist : Object = {"id": "id", "name": "name", "parentAccountId":"parentAccountId", "masterAccountId":"masterAccountId"};
constructor() { }
}
但是,運行我的申請,我得到:
id,name,parentAccountId
undefined
{ default:
{ [Function: Transform]
columnWhitelist:
{ id: 'id',
name: 'name',
parentAccountId: 'parentAccountId',
masterAccountId: 'masterAccountId' } } }
進行調用transform.columnWhitelist,我得到了一個未定義,儘管看到它在生成的JavaScript文件也是如此。我也嘗試了:
var transform = require("./routes/" + objectName + ".js");
或者:
var transform = require("./routes/" + objectName + ".js")();
但這些都不工作,要麼。
我現在明白了。非常感謝!有一點我試過'var Transform = require(「./ routes /」+ objectName +「.js」); var transform = Transform.Transform;'或類似的東西,但我必須輸入錯誤的東西。 – NobleUplift