小编Eri*_*dor的帖子

Nodejs +需要instanceof行为

我在NodeJs中遇到了与instanceof有关的奇怪行为.我正在尝试创建一个模块,该模块抛出异常,这些异常可以通过使用模块捕获并基于异常类型进行处理.但是,测试类型" error instanceof mod.MyException " 的调用总是返回false.

mymodule.js:

function MyException() {}
MyException.prototype = new Error();
MyException.prototype.constructor = MyException;

function Foo() {
    throw new MyException();
}

exports.Foo = Foo;
exports.MyException = MyException;
Run Code Online (Sandbox Code Playgroud)

myconsumingmodule.js

var mod = require('mymodule');

try {
    mod.Foo();
} catch (error) {
    if (error instanceof mod.MyException) { // always returns false
         //do error specific handling (never executes)
         return;
    }
    // generic handling
}
Run Code Online (Sandbox Code Playgroud)

如果我在mymodule.js中执行instanceof测试,那么它返回true

mymodule.js

var a = new MyException()
console.log(a instanceof MyException); //true
Run Code Online (Sandbox Code Playgroud)

但是,如果我在使用模块中创建一个异常并对其进行测试,则会将其正确识别为MyException,而在将其与另一个模块创建的异常进行比较时则不会.

myconsumingmodule.js

var mod = …
Run Code Online (Sandbox Code Playgroud)

exception-handling require node.js

12
推荐指数
2
解决办法
1281
查看次数

MongoDB 连接超时 (Azure)

我有一个使用 MongoLab 插件托管在 Windows Azure 上的应用程序,我遇到了一个问题,即应用程序在我部署后运行良好,但是在几分钟不活动后,我收到一个数据库错误:

没有可用于使用 ReadPreference PRIMARY 查询的主副本集

在我重新启动相同模式返回的网站之前,此错误不会消失 - 直到错误返回几分钟后才能完美运行

我的基本应用代码:

mongoConnect(process.env.CUSTOMCONNSTR_MONGOLAB_URI, {
server: {
    auto_reconnect: true,
    socketOptions: {
        socketTimeoutMS: 120000,
        keepAlive: 1
    }
},
replSet: {
    socketOptions: {
        socketTimeoutMS: 120000,
        keepAlive: 1
    }
}
}).then(function (db) {
    //app configure ...

    http.createServer(app).listen(app.get('port'), function () {
        console.log("Express server listening on port " + app.get('port'));
    });
});
Run Code Online (Sandbox Code Playgroud)

*mongoConnect 是 mongoclient.connect 的一个简单的“promisified”函数

我知道这是最佳实践,我正在与数据库建立一个连接,然后为所有请求重用该数据库对象。通过阅读https://support.mongolab.com/entries/23009358-Handling-dropped-connections-on-Windows-Azure 之类的内容,我将 sockettimeouts 设置为 2 分钟,以防止任何防火墙过早杀死套接字并自动重新连接到true 所以它们重新连接,但是这两种设置都不能解决问题。

azure mongodb node.js

5
推荐指数
0
解决办法
1518
查看次数

标签 统计

node.js ×2

azure ×1

exception-handling ×1

mongodb ×1

require ×1