使用NodeJS从TypeScript与MongoDB进行通信

时间:2012-10-18 08:54:18

标签: node.js mongodb typescript

据我了解,必须对NodeJS中的所有IO使用异步回调(?)

我正试图绕过微软提供的this example code

他们以db.open(function(){})开头; 也就是说,在“open”的回调中没有提供代码..

因此,所有与db对象交互的代码都将在open完成之前执行。 他们的样本如何运作?

对于我自己的代码,为了能够将任何数据写入DB,我必须提供编写代码作为db.open函数的回调。

运行我的代码时出现另一个奇怪的问题,在写入数据之后,即使所有用户代码都已完成,nodejs服务器也不会退出。 那是为什么?

1 个答案:

答案 0 :(得分:0)

我根本不知道Typescript,但通常是node.js术语:

>他们的样本如何运作?

在app.ts

import db = module("./db")
...

var app = express.createServer();

大概是,import命令会触发db.open(),而createServer()命令需要足够长的时间并且至少调用一次异步调用,这样db.open()总是会完成。

>即使所有用户代码都已完成,nodejs服务器也不会退出。那是为什么?

根据你的说法:

  • 您正在使用db.open

  • 中的回调
  • 您的应用程序正在运行“完成”,然后才进行回调 执行

两种可能性(因为不知道打字稿而无法评论): 1.通过使用回调,您在TypeScript无法处理的上下文中执行代码 2.你没有调用像res.end()或res.send()

这样的最终函数

如果是这种情况,那么你必须要么摆脱db.open中的回调,而是在你的应用程序中使用setTimeout( myFunction, waitTime);,或者找出TypeScript如何干净地包装自己并执行以下操作:

var self = this;

db.open( function() {
  ...  // do all the computations you want
  self.finalCleanup();  // tell typescript you're done
}