我在一个不打算连续运行的脚本中使用mongoose,我正面临着一个看似非常简单的问题,但我找不到答案; 简单地说,一旦我调用任何mongoose函数发送请求到mongodb我的nodejs实例永远不会停止,我必须手动杀死它,比如Ctrl + c或Program.exit().
代码看起来大致如下:
var mongoose = require('mongoose');
// if my program ends after this line, it shuts down as expected, my guess is that the connection is not really done here but only on the first real request ?
mongoose.connect('mongodb://localhost:27017/somedb');
// define some models
// if I include this line for example, node never stop afterwards
var MyModel = mongoose.model('MyModel', MySchema);
Run Code Online (Sandbox Code Playgroud)
我尝试添加对mongoose.disconnect()的调用,但没有结果.除此之外,一切正常(找到,保存,......).
这个问题与此人完全相同,遗憾的是他没有收到任何答复:https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661
谢谢
编辑:接受下面的答案,因为它在技术上是正确的,但如果有人再次遇到这个问题,似乎mongoose和/或mongodb驱动程序实际上并没有关闭连接时,如果仍然有查询运行.
它根本不记得断开连接调用,一旦查询完成运行它就不会这样做; 它只是丢弃你的调用,没有抛出异常或任何类型的东西,从来没有真正关闭连接.
所以你有它:确保在调用disconnect()之前已经处理了每个查询,如果你想让它真正起作用的话.
我正在完全重写一个旧库,我不知道如何处理这种情况(为了理解,所有人都欢呼自行车比喻):
我有以下课程:
TBike - 自行车本身TBikeWheel - 自行车的一个轮子TBikeWheelFront并且TBikeWheelBack,它们都从它继承TBikeWheel并实现了它们所需的特定内容这非常简单,但现在我决定制造多种自行车,每辆自行车都有自己的轮子 - 它们和普通的前轮/后轮一样,加上特定的自行车.
TBikeXYZ - 继承自 TBikeTBikeWheelXYZ - 继承自 TBikeWheel这是我的问题:TBikeWheelFrontXYZ应该继承TBikeWheelXYZ(以获得XYZ轮的特定方法),但它也应该继承TBikeWheelFront(以获得前轮的特定方法).
我的问题是,如何以不这样的方式实现它:
我的应用程序中有一些表单具有不同的"状态",具体取决于用户的操作; 例如,当通过他的文件列出时,表单会在网格中显示有关该文件的一些数据,但如果他点击某个按钮,则网格会被与其相关的图表替换.简单地说,表单中的控件取决于用户想要做什么.
当然,这样做的显而易见的方法是根据需要显示/隐藏控件,就像小数字的魅力一样,但是一旦你达到每个状态10/15 +控件(或者真的超过3个状态)它就无法使用.
我现在正在尝试使用TFrame:我为每个状态创建一个框架,然后在我的表单上创建每个框架的实例,然后我只使用Visible显示我想要的那个 - 同时对其进行一些控制最重要的是,因为他们都共享它们.
这是做我想要的正确方法,还是我错过了一些东西?我以为我只能创建一个tframe实例,然后选择在其中显示哪个实例,但它看起来并不那样.
谢谢
我有一个包含三个部分的表单,我希望允许用户根据需要调整它们的大小
左侧有一个部分(占据整个高度),右侧有一个部分,再次垂直切割成两个部分.见下文:
11 | 22
11 | ---
11 | 33
使用一个分离器非常简单:
Component1.align := alLeft Splitter1.align := alLeft Component2.align := alClient
现在,从那开始我完全不知道如何使垂直分离器工作.如果我将我的第二个分离器设置为alTop或alBottom,它会一直到顶部/底部而不是在右半部分.
我设法得到这样的东西:
11111
--------
22 || 33
通过先创建垂直分割,然后创建水平分割,但这不起作用.
一种可能的解决方案是使用面板作为我的右侧,然后使用分割器INSIDE这个面板进行垂直分割,但它并不像真正的方式.
谢谢
我使用javascript/jquery来填充包含变音符号的dom元素:
var text1 = "Unser platonisches Internetreich droht in die H%E4nde einer bewaffneten Miliz zu fallen."
$("#quote1 span").html(unescape(text1));
Run Code Online (Sandbox Code Playgroud)
如何摆脱网址编码,例如"H%E4nde"并改为使用"Hände"?我试过了
<meta charset="utf-8" />
<meta name="http-equiv" content="Content-type: text/html; charset=UTF-8"/>
<script type="text/javascript" src="js/index.js" charset="utf-8"></script>
Run Code Online (Sandbox Code Playgroud)
但它们似乎都不起作用......
感谢帮助.
在Write/ReadComponentResFile的帮助下,我们使用的一些应用程序依赖于TComponent后代来轻松保存/加载其内部对象的状态
function TSomeClass.SaveState: boolean;
begin
...
try
...
WriteComponentResFile(self.f_path, TComponent(self));
result := true;
except
result := false;
end;
....
end;
Run Code Online (Sandbox Code Playgroud)
现在我们想压缩这些数据,但由于某种原因,我一直无法找到使用JCL bzip2流类编写类似函数的方法,这是关于不支持搜索操作的
由于我不是TStream专家,我想知道实现这种压缩的最简单方法; 使用TComponent读/写?
谢谢
我正在处理的一段代码必须分析由另一个软件生成的外来文件格式 - 从游戏中"重放"更精确.在此重播中,玩家产生的每个动作都以可变数量的参数保存.
我的软件会对用户的操作进行分析,比如在整个游戏过程中每分钟生成一个动作图表等等......并且在内部提供详细信息,每个动作都用自己的方法转换为一个对象,但有几十个即使对于最简单的游戏,这种分析需要花费一些时间,而且我现在正在寻找一种方法来在重播已经被分析过一次时将其固定.
我有几个想法,但我不确定应该应用哪一个:
1 - 某种序列化将动作的对象状态保存在磁盘上,以便可以直接从它重新加载对象?我不确定这会对性能产生重大影响,因为它仍然需要完成所有对象创建
2 - 在手工创建每个对象类型的大型池并在用户从重放移动到重放时重用它们,避免创造时间?
我不知道如何继续这里,所以如果你对如何快速设计这个有任何好主意,请随时分享.请注意,一旦分析,占用磁盘空间以保存重放状态不是问题,这些都是"高端"游戏玩家的计算机,因此只要加速进程,我就可以采取一些自由来消耗多少资源.
在此先感谢您的帮助
delphi ×5
compression ×1
javascript ×1
mongodb ×1
mongoose ×1
node.js ×1
performance ×1
splitter ×1
tframe ×1
url-encoding ×1