【问题标题】:How to parse node js response of mongodb data in angular?如何以角度解析mongodb数据的节点js响应?
【发布时间】:2015-12-16 11:47:45
【问题描述】:

我在节点 [not express] 中有一个 http 服务器。单击按钮时,我有一个 get 方法,该方法然后从 mongodb 中提取文档(使用 mongoose)并将其显示在角度页面上。

点击按钮时:

       $http.get('/get').success(function(response){
         console.log(response);
       //logic to store JSON response of database and perform repeat to display each document returned on UI
       });

在使用 http.createServer 而不是 express 创建服务器的节点代码中:

     if(req.url==="/get"){
      res.writeHead(200,{'content-type':'text/plain'});
      modelName.find({}, 'property1 prop2 prop3', function(err,docs){
        res.write('response...:  '+docs);
       });
     }

这是我的问题: 我能够将响应从节点 js 发送到角度 js,但如何解析它?如果我没有在文档之前添加“响应...:”,那么我会收到错误消息“第一个参数应该是字符串或缓冲区”。在角度上,我得到如下响应:->

      response...:{_id:....1, prop1: 'a',prop2: 'b',prop3: 'c'},
      {_id:....2, prop1: 'ab',prop2: 'bc',prop3: 'cd'}

我想将文档显示为表格格式

【问题讨论】:

  • 发送json 而不是plain string 喜欢:res.write({'response':docs});
  • 仍然得到同样的错误'第一个参数应该是一个字符串或缓冲区'
  • 您实际上可以设置 Content-Type:'application/json' 。如果您在此之后遇到相同的错误,请执行 res.send(JSON.stringify(docs));

标签: javascript angularjs node.js mongodb


【解决方案1】:

我不知道你的确切设置,但我认为你应该转移application/json 而不是text/plain

您不能简单地将字符串连接到docs,您只需返回docs(作为数组传输)或写入res.write({'response':docs})(作为对象传输)。

考虑从 $http 迁移到资源服务。在资源服务中,如果要作为对象传输,则需要将isArray设置为false,如果要作为数组传输,则需要设置为true:https://docs.angularjs.org/api/ngResource/service/$resource

【讨论】:

  • 仍然收到相同的错误“第一个参数应该是字符串或缓冲区”。
  • 请查看 Firefox/Chrome 开发工具中的请求以查看响应的类型,我怀疑它仍然是纯文本。
  • 您是从 Node 还是在浏览器中收到此错误。无论哪种方式,您可以发布堆栈跟踪吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 2017-12-13
  • 2021-10-12
  • 2022-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多