javascript - 跳过 Node.js JavaScript 片段中的代码

标签 javascript node.js

我列出了一些代码:

function write_to_orchestrate(data_to_write) {

    console.log('more testing');

    db.put('musician', '1', '{"test":"test1"}')
        .then(function (result) {
            res.send(result);
        })
        .fail(function (err) {
            res.send(err);
        });

    console.log('something');

}

看来,即使我在 db.put 函数调用的 .then 和 .fail 中的 res.send() 函数调用上设置了断点,它也不会为它们中的任何一个停止。但是 console.log('more testing');和 console.log('something');没有错误地到达。

我正在使用 Webstorm,但即使我只是使用终端和文本编辑器定期执行此代码,似乎也只是以某种方式跳过了 db.put(...) 的代码。关于其他故障排除/调试的任何想法?

我还注意到,此调用发出 put 的数据源也处于事件状态并接受命令。只是为了确保我发出了几个 curl 命令并确保数据传入和传出都很好。

这是一段解释发生了什么的视频: http://youtu.be/CKq69z4ml8o

更新 #1: 我也尝试了将 '{"test":"test1"}' 变成 {"test":"test1"} 的建议,这似乎是个好主意,但仍然不行。

更新#2:根据@hafthor,我尝试了另一个建议并实现了这样的代码以消除可能的分号问题。

function write_to_orchestrate(data_to_write) {

    console.log('more testing');

    db.put('musician', '1', {"test":"test1"}).then(function (result){res.send(result);}).fail(function (err) {res.send(err);});

    console.log('something');

}

它仍然没有,但我确实在 WebStorm 中运行代码和调试时发现代码进入了 db.put,但随后我尝试进入代码,它直接进入 .fail,然后跳出并结束于 console.log('something');行。

此外,还有另一个视频,用于进一步尝试使其正常工作:http://www.youtube.com/watch?v=rItBhyfG5AY

最佳答案

  1. 您未能明确说明您正在使用的数据库模块。根据上下文线索,它看起来像 this orchestrate module , 对吗?
  2. YouTube 天啊!将您的代码放在您的问题中。包括初始化 db 的地方,它是最重要的部分,它允许您通过更改您在此处发布的文本来隐藏您的 token ......您要么想要删除这些视频或更改你的 token ,你在第一个视频中无可救药地破坏了你的安全。是的,它很模糊,但没那么模糊。

好的,您的第一个故障排除步骤是创建一个简化的脚本。我的猜测是您以某种方式错误地使用了该模块。试试这个:

var db = require('orchestrate')('SUPER SECRET TOKEN THAT SHOULD NOT BE IN A YOUTUBE VIDEO');

console.log('before query');
db.put('musician', '1', {test: 'test1'})
    .then(function (result) {
        console.log('THEN!!!');
        console.log(result);
    })
    .fail(function (err) {
        console.log('FAIL!!!');
        console.log(err);
    });
console.log('after query');

...我希望您在这里注意几件重要的事情:

  • 隐藏你的 token (说真的,隐藏你的 token )
  • 我正在根据我链接的模块的文档工作,但如果您使用不同的东西或以任何方式修改它,所有这些建议都是可疑的
  • 根据@nhaa123s 的评论和文档,该值是对象文字,而不是 JSON 字符串,因此我进行了调整
  • 根据链接文档,musician 是集合名称,1 是您要设置的键(这似乎是一个奇怪的键名,但无论如何) , {test:'test1'} 是您为您的值(value)使用的数据结构。我从未使用过 orchestrate,如果需要,请确保您已正确初始化 musician,并请确认它将严格支持数字键,例如 1(或,更好的是,使用更传统的 key 类型,如 testkey)
  • 我使用了 console.log,因此您可以确认回调正在更简单地执行。

...您可能会看到几种不同的结果,具体取决于问题的实际所在。如果您正确使用数据库模块,那么您应该执行 .then() 回调并知道问题在于您如何将它合并到您的代码中。如果它失败并且您在控制台上收到失败消息,您将看到实际的错误,这可能会引导您朝着正确的方向前进。如果您从不调用 .then().fail() 回调,那么 orchestrate 模块可能还没有准备好,或者您的依赖项存在一些不兼容性链。

如果您可以成功执行该代码段,下一步就是将 db.put().then().fail(); 链复制到您的 write_to_orchestrate() 函数没有任何修改,删除现有链。如果它仍然有效,那么你已经解决了你的数据库问题,如果没有,那么我的第一个猜测是某种范围问题,但如果不看更多代码就无法判断。

现在,我相信您的响应对象肯定存在范围问题,因此您从未发送过任何内容。

将此添加到顶部的 write_to_orchestrate() 函数中:

function write_to_orchestrate(data_to_write) {
    if (res === undefined) console.log("This is not the response you're looking for");
    else console.log("Just kidding, you're (probably) good");

    // etc.
}

如果您发现 res 在您的函数中不可访问,您只需要找到一种方法使其进入作用域,或许可以通过将其与 data_to_write 一起发送:

function write_to_orchestrate(data_to_write, res) {
    if (res === undefined) console.log("The problem clearly exists even further up the chain");
    else console.log("Ah, just as we expected");

    // etc.
}

...这会让您走上正确的道路。

关于javascript - 跳过 Node.js JavaScript 片段中的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20984211/

相关文章:

node.js - 在一个连接中从 node.js 向多个用户发送苹果推送通知

javascript - Sequelize 复杂和/或

javascript - NodeJS 可以在网络上使用而不是在命令行上使用吗

javascript - Sequelize 4.3.2 n :m (many-to-many) association: Unhandled rejection SequelizeEagerLoadingError

javascript - 如果价格为 0,00€,则隐藏按钮

javascript - 如何在 Angular 中为自定义验证器添加自定义验证错误消息

node.js - 无法更新 DynamoDB 中的项目

javascript - 从 HTML 创建 base64 字符串

php - 将 html 输入作为变量发送到 jquery,然后将其发送到 PHP

javascript - 检查json是否包含react-native中的键