NodeJS res.send不返回变量值

时间:2018-08-17 07:19:32

标签: node.js express post

我正在开发NodeJS / Express程序,并且试图获取POST请求以返回数据。当我返回直接字符串时,我得到正确的响应。

app.post("/DoStuff", function(req, res, Data) {
  DoStuf.DoStuffFunction(req.body.UserID, function(label) {
    Data = label
    })
    res.send({message: "Stuff"});
  })

当我更改它以返回变量(仍然是字符串)时,它仅返回“ {}”。

app.post("/DoStuff", function(req, res, Data) {
  DoStuf.DoStuffFunction(req.body.UserID, function(label) {
    Data = label
    })
    res.send({message: Data});
  })

即使我使Data =“ foo”,响应也是“ {}”

3 个答案:

答案 0 :(得分:3)

您需要从回调函数内部发送。在您的代码中,$buildSource = 'M:\build\' $acctKey = ConvertTo-SecureString -String "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential -ArgumentList "Azure\wserverBuild", $acctKey New-PSDrive -Name M -PSProvider FileSystem -Root "\\wserverBuild.file.core.windows.net\build" -Credential $credential -Persist Copy-Item 'M:\build\' -Destination 'C:build' -Recurse res.send的回调无关

DoStuffFunction

答案 1 :(得分:1)

好像您的DoStuffFunction是异步的。因此,只需在回调中移动res.send(..)就可以了

app.post("/DoStuff", function(req, res, Data) {
  DoStuf.DoStuffFunction(req.body.UserID, function(label) {
    res.send({message: label});
   })
})

答案 2 :(得分:1)

  

当我更改它以返回变量(仍然是字符串)时,它仅返回“ {}”。

这是因为DoStuf.DoStuffFunction(){}异步

当您使用stuff作为值时,它起作用的原因是因为该操作是同步的。在发送回复之前,您将拥有自己的价值。

如果仅在DoStuffFunction()完​​成后才发送响应 ,请将response.send()放在回调中。

'use strict';

app.post("/DoStuff", function(req, res, Data) {
  DoStuf.DoStuffFunction(req.body.UserID, function(label) {
    res.send({message: label}); //you can send label's value directly
    });
});