gpt4 book ai didi

node.js - 当我在 node.js 中使用誓言时出现奇怪的错误

转载 作者:行者123 更新时间:2023-11-28 21:32:44 26 4
gpt4 key购买 nike

我正在尝试使用 vows 开始我的 node.js 项目和 BDD。然后我得到了这个奇怪的错误。

我正在尝试为 express with vows 编写一个小的路由测试,这是我的原始代码,

node_server.prototype.mainpage = function(callback) {
http.get({host:'localhost', port:this.port, path:'/', agent:false}, function(res){
callback(res.statusCode);
});
}

下面是我如何写我的誓言测试

vows.describe('Request to the server').addBatch({
'Should get http 200': {
topic: function () {
app_server.mainpage(this.callback)
},

'we get 200': function (statusCode) {
app_server.close_server();
assert.equal(statusCode, 200);
}
},
}).run(); // Run it

即使 statusCode 是正确的,Vows 总是报告意外错误,就像这样

» An unexpected error was caught: 200

所以我像这样更改我的主页功能

node_server.prototype.mainpage = function(callback) {
http.get({host:'localhost', port:this.port, path:'/', agent:false}, function(res){
callback("error", res.statusCode); // Here I added a err message in front of the status code.
});
}

我也将我的测试套件更改为

'we get 200': function (err, statusCode) {

然后这个测试成功了!我只是想知道这种奇怪的情况是怎么发生的。我已经阅读了 vows 的文档,但我没有找到他们说我必须将 2 个参数而不是 1 个参数放入 cb 的任何地方。

给我一​​些线索!提前致谢!

最佳答案

Vows 文档没有提到它,但它假定错误优先回调模式,该模式被 Node.js 社区广泛采用。在此模式中,回调的第一个参数始终是一个错误。如果它为 null 或未定义,那么您就知道异步操作成功了。我建议您也将此模式用于您自己的所有代码,即使该函数永远不会产生错误参数。

如果您自己使用此模式,则可以更轻松地使用其他库,例如 async ,这可以让复杂的应用程序变得更容易。

关于node.js - 当我在 node.js 中使用誓言时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13409734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com