如何使用Sequelize和Javascript返回查询结果?

如何使用Sequelize和Javascript返回查询结果?,javascript,database,sequelize.js,Javascript,Database,Sequelize.js,我是javascript新手,我在这里遇到了困难。我甚至不认为这是一个续集问题,更可能是关于javascript行为的问题 我有以下代码: sequelize.query(query).success( function(row){ console.log(row); } ) var行返回我想要的值,但除了打印到控制台之外,我不知道如何访问它们。我已经尝试返回该值,但它没有返回到我期望的位置,我也不确定它会返回到哪里。我想要我的行,但我不知道如何获得它:在服务器

我是javascript新手,我在这里遇到了困难。我甚至不认为这是一个续集问题,更可能是关于javascript行为的问题

我有以下代码:

sequelize.query(query).success( function(row){
            console.log(row);
    }
)

var行返回我想要的值,但除了打印到控制台之外,我不知道如何访问它们。我已经尝试返回该值,但它没有返回到我期望的位置,我也不确定它会返回到哪里。我想要我的行,但我不知道如何获得它:

在服务器端使用Javascript需要使用回调。您不能像您希望的那样返回它们,但是您可以编写一个函数来对结果执行操作

sequelize.queryquery.successfunctionrow{ //这是你们在街上做事的地方 //结束这个过程 过程。退出; } 一个更实际的示例,在快速路线处理程序中:

//创建会话 app.post/login,functionreq,res{ var username=req.body.username, password=req.body.password; //显然,不要将其直接注入到实际的查询中 //世界很糟糕。 返回续集 .querySELECT*从用户名='+username+'的用户中选择 .successfunctionrow{ //另外-永远不要以纯文本形式存储密码 如果row.password==密码{ req.session.user=行; 返回res.json{success:true}; } 否则{ 返回res.json{success:false,error:true}; } }; }; 忽略注入和纯文本密码示例-为简洁起见

函数通过存储对函数定义范围内任何变量的引用来充当闭包。在我上面的示例中,我为sequelize提供的回调存储了正确的res值,以供每个请求引用。这样做的直接好处是,在查询运行时可以处理更多的请求,一旦查询完成,就会执行更多的代码。如果不是这样,那么假设Node.js将等待一个查询完成并阻止所有其他请求的过程。这是不可取的。回调风格是这样的,您的代码可以做它需要做的事情并继续前进,等待重要的或处理程序繁重的部分完成,并在完成后调用函数

编辑

回答此问题后,处理回调的API已更改。Sequelize现在将从.query返回一个承诺。因此,将.success更改为.then应该是您需要做的全部工作。

根据

向后兼容性更改:

已使用.on'success'或.success删除事件支持 不再支持。尝试使用。然后改为

根据这一点,您现在将使用如下内容:

sequelize.query("SELECT * FROM `users`", { type: sequelize.QueryTypes.SELECT})
    .then(function(users) {
        console.log(users);
    });

感谢@JonathanHobbs提供语言过滤器。您的编辑被拒绝,因为我自动向正文添加了更多内容?所以我把必要的部分转到这里。谢谢你的回复!我可能还是误会了。我添加了req.session.user来存储行数据,这样就可以在函数外部访问这些信息,但在函数外部它仍然是未定义的。最终,我希望存储此信息,就像我希望在多个页面上显示它一样,但似乎我不知道如何执行此操作。您无法在定义此函数的范围内访问此函数中的数据。使用服务器端Javascript首先要学习的是停止同步思考。函数外部的任何代码都需要与req.session赋值一起插入函数内部。看看我给你的例子-我不在回调之外处理信息,我在回调内部处理信息。请提供您获得此实现的文档的链接,好吗?我得到以下内容:sequelize.query…success不是一个函数。这是否已被弃用?我不确定我的答案是否不再有用,我的回答针对问题中发布的问题,该问题与API更改无关,而这个回答更多的是对我的评论,而不是对问题的直接回答。我的问题不被接受。提出问题的人从未将答案标记为已接受。我正在执行下面的操作,但从结果集my var query=CALL getdata:pagenum中的每一行都附加了Rowdatapacket数据;sequelize.queryquery,{replacements:{pagenum:n,类型:sequelize.QueryTypes.SELECT}。然后是函数结果{console.logresults;}。errorfunctionerr{};如何删除rowdatapacket