我有一个使用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