如何将后端错误/成功消息从Node.js发送到AngularJS控制器的前端?

时间:2015-10-13 08:01:36

标签: angularjs node.js

我有一个基于MEAN堆栈的应用程序,带有Expressjs。

需要从后端(nodejs)向前端(angularjs)发送成功或错误消息 - 以显示文件成功上载的时间。下面 - 在app.post成功完成后,我想在前端(在AngularJS中)显示此结果。

app.post('/upload' , function (req, res) {
        //busboy handles multi-part file upload
        console.log('Post received to upload ... ');

        var fstream;

        req.pipe(req.busboy);

        req.busboy.on('file', function (fieldname, file, filename) {
            //only update if the filename was change or exists
            if (filename!== undefined || filename !=='') {
                  //reset url
                  options.url = '';
                 console.log("Uploading the file " + filename);
                  console.log("before", options);
                  options.path = '/uploads/'  + filename;
                  options.fileName = filename; //update file name

                  console.log("Updating options ... ", options);
                  fstream = fs.createWriteStream(__dirname + '/uploads/' + filename); //path where the file will be uploaded
                  file.pipe(fstream);
                  fstream.on('close', function () {
                      console.log("Upload finished successfully ! Uploaded " + filename);
                      initOntology();//initialize the ontology from upload
                      initEdges();
                  });
            }

        });
});

有什么方法可以将结果从NodeJS发送到AngularJS控制器?

有一个类似的问题here,但尚未解决。

2 个答案:

答案 0 :(得分:1)

你应该使用socket.io

当前端启动时,它会连接到“套接字连接”。这是与HTTP不同的协议。如果它不能这样做,它将使用降级版本的连接,该版本通过HTTP工作。

连接的任何一端都可以“发出”一条消息,然后发送到另一端。后端可以向所有客户端或特定客户端发送消息。您可以设置Angular来接收消息并创建一个或多个控制器可能正在侦听的事件。请参阅https://github.com/btford/angular-socket-io当前端想要将消息发送回后端时,它可以使用套接字,或者仅使用常规HTTP POST等。

使用Angular和Node是非常标准的,应该有很多关于如何做的信息。

答案 1 :(得分:1)

只需使用res对象发回http响应:

res.status(200).send('OK') 

发生错误时,发送错误状态

res.status(500).send(errorMsg)

对于角度:

$http.post(...).then(function successCallback(response) {
      // response with 200 status
      }, function errorCallback(response) {
      // response with status 500
  });