我有一个基于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,但尚未解决。
答案 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
});