2017-03-27 26 views
3

私はExpress.jsで構築され、TypeScriptでコード化されたNode.jsサーバーを持っています。これは、動的URLに要求されているデータベース・オブジェクトのSequelizeモジュールをロードし、その後、ルールで活字体モジュールをロードしようと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."); 
    } 
    // ... 
} 

:ここに私のサーバーに対してGET呼び出しの抜粋ですここに私のルールセットクラスの始まりだなど、列が上照会することができ、選択することができますどの列に:

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")(); 

しかし、これらの作業のどちらをどちらか。あなたはtsconfig.json内のモジュールとしてcommonjsを持っており、デフォルトとしてエクスポートクラスを変換する場合は、

var transform = require("./routes/" + objectName + ".js").default; 

あなたを使用したくない場合は

答えて

3

あなたはおそらく

var transform = require("./routes/" + objectName + ".js").default; 
+0

今すぐ取得します。どうもありがとう!ある時点で、私は 'var Transform = require(" ./ routes/"+ objectName +" .js ");を試しました。 var transform = Transform.Transform; 'などのようなものですが、間違った型を入力したのでしょうか? – NobleUplift

0

としてそれをインポートする必要があります

class Transform { 
     static columnWhitelist: Object = {"id": "id", "name": "name", "parentAccountId": "parentAccountId", "masterAccountId": "masterAccountId"}; 

     constructor() {} 
} 

export = Transform; 

あなたは前と同じようにして後でやり直すことができます:

var transform = require ("./ routes /" + objectName + ".js"); 
+0

'export = Transform;' JavaScriptの 'module.exports = ...'と比較して、タイプスクリプト固有の構文か、後者を書く別の方法ですか? – NobleUplift

+0

** export = **は、typescriptに**エクスポートのデフォルト**動作を与えるために使用されます。加えて、インターフェイス、関数、列挙型などで動作します。 さらに詳しくは、 [https://www.typescriptlang.org/docs/handbook/modules.html](https://)のドキュメントを参照してください。 www.typescriptlang.org/docs/handbook/modules.html)入力したままにしておきたい場合は、export =で で検索できます。var transform:typeof Transform = require( "./ routes/"+ objectName +" .js "); – nkweb

関連する問題