【问题标题】:How do I return a json from a function?如何从函数返回 json?
【发布时间】:2018-07-23 22:39:33
【问题描述】:

我现在正在玩弄 Javascript、node js 和sails。我正在尝试学习如何做一些事情。

现在,我有一个我想做的基本情况的类比。我想将rest调用返回的json返回给控制器,并将其显示在网页上。

到目前为止,这就是我所拥有的:

module.exports = {


  /**
   * `PersonController.scream()`
   */
  scream: function (req, res) {
    function subscream(){
        var per = {voice: 'AAAAAAAAAAAAAAA'};
        return per;
    }
    var loudness = subscream()
    return loudness;
  }

};

console.log 语句确实将 json 打印到控制台,但该函数似乎永远不会返回。我知道我遗漏了一些明显的东西,但是我对 Javascript 或节点 js 的了解不够多,不知道该怎么称呼这个问题,所以很遗憾我还不能谷歌。

【问题讨论】:

  • 你怎么知道它不会返回?
  • 因为它没有显示在我用来调用该函数的页面上。我去localhost:1337/Person/scream,页面从来没有显示任何东西。
  • @Inglonias 我们可以看看你的路由器代码吗?
  • @Li357 什么是路由器代码?我什么都没写我刚刚在我的 blueprint.js 文件中设置了actions: true,。 (使用sails 1.0)
  • 您确定像对象scream 一样调用var scream 是个好主意吗?

标签: javascript json node.js sails.js


【解决方案1】:

要将 JSON 打印到客户端,您必须发送响应,而不是在函数中返回 JSON。

scream: function (req, res) {
  function subscream(){
    var per = {voice: 'AAAAAAAAAAAAAAA'};
    var perString = JSON.stringify(per);
    console.log(perString)
    return perString;
  }
  var loudness = subscream()
  res.send(loudness);
}

【讨论】:

  • 成功了。我会尽快将此答案标记为正确。问题是我不知道res.send 甚至是一个选项。我在哪里可以找到更多相关文档?
  • 查看 Node.js 文档。这是 LTS 版本的链接:nodejs.org/dist/latest-v8.x/docs/api/…
  • 不确定您正在查看哪些 Sails 文档,但在 controllers docs 中很难错过...
【解决方案2】:
module.exports = {
  /**
   * `PersonController.scream()`
   */
  scream: function (req, res) {
   function subscream(){
    return new Promise(function(resolve, reject){
     var per = {voice: 'AAAAAAAAAAAAAAA'};
        var perString = JSON.stringify(per);
        console.log(perString)
        resolve(perString);
    })
   }
    var scream = subscream()
    scream.then(function(resolvedPromise){
      res.send(resolvedPromise)
    }).catch(function(){
        res.send("error")
     })
  }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2019-08-21
    • 2017-03-12
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多