当前位置: 首页 > 面试题库 >

为什么我不能内联调用res.json?

伍昱
2023-03-14
问题内容

我有一个expressjs应用程序,在特定的路由上,我调用了一个函数,该函数通过使用res.json数据库文档作为参数来响应数据库中的用户。我使用基于promise的库,并且想在将数据库文档放入响应中的回调内联。但是当我这样做时程序会失败。有人可以解释为什么吗?我还想知道为什么内联调用才能console.log真正起作用。两种方法res.json和之间有一些根本区别console.log吗?

这是一个有效和无效的示例。假定getUserFromDatabase()返回用户文档的承诺。

//This works
var getUser = function(req, res) {
    getUserFromDatabase().then(function(doc) {
        res.json(doc);
    });    
}

//This does not work (the server never responds to the request)
var getUserInline = function(req, res) {
    getUserFromDatabase().then(res.json);    
}

//This works (the object is printed to the console)
var printUser = function(req, res) {
    getUserFromDatabase().then(console.log);    
}

问题答案:

像这样使用时,该json函数会丢失其正确的this绑定,因为.then它将直接调用它而不参考res父对象,因此将其绑定:

var getUserInline = function(req, res) {
    getUserFromDatabase().then(res.json.bind(res));    
}


 类似资料:
  • 问题内容: 如果html文件是本地文件(在我的C驱动器上),则可以使用,但是如果html文件在服务器上并且图像文件是本地文件,则无法使用。这是为什么? 任何可能的解决方法? 问题答案: 如果客户端可以请求本地文件系统文件,然后使用JavaScript找出其中的内容,则将是一个安全漏洞。 解决此问题的唯一方法是在浏览器中构建扩展。Firefox扩展和IE扩展可以访问本地资源。Chrome的限制更为严

  • 我在Visual Studio 2012中创建了一个新的Visual C Win32项目—只是一个带有预编译头的控制台应用程序。我为和三行代码到: 我编译它。它编译得很好。 我在Visual Studio 2013中尝试了同样的方法。我得到以下错误: 这是从MSDN订阅者下载的Visual Studio Premium 2013 Update 2的新安装。我在两台不同的机器上尝试了同样的事情,一台

  • 我了解在lambda中捕获此(修改对象属性)的正确方法如下: 但我对我所看到的以下特点感到好奇: 我感到困惑(并希望得到回答)的奇怪之处在于,为什么以下方法有效: 以及为什么我无法通过引用明确捕获此内容:

  • null null 我在/s/chart/img/purple.png中有一个img,我想在“ChartContainer3”中创建,但我不明白当我单击submit时没有发生任何事情,没有创建。那么我如何在“ChartContainer3”中进行创建呢?

  • 我正在使用forEach循环一个nodeList。我的代码如下 此代码引发错误为 未捕获的TypeError:Array.Foreach不是函数 然而,一些较旧的浏览器还没有实现nodelist.foreach()和array.from()。但是这些限制可以通过使用array.prototype.foreach()来规避(本文档中有更多内容)。 参考:MDN

  • 从TensorArray读取: 使用: 问题: 回溯(最近一次调用last):RLU培训中第130行的文件“\main.py”。train()文件“C:\Users\user\Documents\Projects\rl toolkit\rl_training.py”,第129行,在train self中_rpm,赛尔夫。批量大小,自行确定。梯度步数,记录步数b=self。在call result=