如何在Angular $ http中处理来自Express response.write()的响应

时间:2015-12-17 11:46:28

标签: angularjs node.js express xmlhttprequest

我正在尝试使用ng-file-upoad上传csv文件。这是我的代码片段:

Upload.upload({
   url: baseUrl + '/file-upload',
   data: {
      file: file
   }
 })
 .then(function(res) {
    console.log('success: ===> ', res);
 }, function(err) {
    console.log('erroir: ===> ', err);
 }, function() {
    console.log('progress: ', arguments);
 });

在节点环境中,我正在解析文件并将数据插入数据库中。我不想关闭连接。这就是我使用“response.write”的原因。这是我的代码片段:

var path = req.files.file.path,
    currentIndex = 0;

fs.readFile(path, 'utf8', function(err, data) { 
    if(err) {
         // handle error
    } else {
        // making array (dataArray) from data
        dataArray.forEach(function(eachData){
            newEntry = new app.db.models.SomeCollection(eachData);
            newEntry.save(function(err, data) {
              if (currentIndex === dataArray.length) {
                 res.end('DONE!');
              } else {
                  currentIndex++;
                  res.write(JSON.stringify({
                     total: dataArray.length,
                     done: currentIndex
                  }));
              }
            });
        })
    }
});

我的问题是如何获取我在“res.write”中传递的数据?我不想仅为此目的使用套接字。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

正如已经解释过here

  

response.send(msg)等于response.write(msg); response.end();

     

这意味着,send只能调用一次,write可以多次调用,但你必须自己调用end。

由于<?php $data = array('name'=>'title', 'class'=>'form-control', 'id'=>'title', 'placeholder'=>'Blog Title', 'value'=>set_value('title', $this_blog->blog_title)); echo form_input($data); ?> 缺失,您可能没有收到回复。

一旦你response.end()你的回复,你应该能够在返回的Upload.upload承诺中访问角度控制器中的响应数据。

如你所说,它不像关闭连接。这不是 socket-ish 之类的实现(例如end()ws)。一旦发出请求,即使要提供有关该请求的错误详细信息(即状态401,403,404等),它也应该有响应。