2012-04-17 109 views
0

我已经成功地使用Express在Node.js中获取文件上传工作,并且在代码中我正在检查用户是否尝试上传图片。发送文本到浏览器

如果文件已成功上传,我想向用户显示一条消息,直接通过上传表单向HTML页面显示。如果用户试图上传的文件不是图像,或者在上传过程中发生了其他情况,应该也是如此。

下面的代码工作(res.send ...),但它打开了一个只包含消息的新页面。

我的问题是:如何更改我的代码,以便将消息直接发送到HTML页面?如果它可以用于任何用途,我使用翡翠。

在此先感谢!

app.post('/file-upload', function(req, res, next) { 
    var fileType = req.files.thumbnail.type; 
    var divided = fileType.split("/"); 
    var theType = divided[0]; 

    if (theType === "image"){ 
     var tmp_path = req.files.thumbnail.path; 

     var target_path = './public/images/' + req.files.thumbnail.name; 

     fs.rename(tmp_path, target_path, function(err) { 
      if (err) throw err; 

      fs.unlink(tmp_path, function() { 
       if (err) { 
        throw err; 
        res.send('Something happened while trying to upload, try again!'); 
       } 
       res.send('File uploaded to: ' + target_path + ' - ' + req.files.thumbnail.size + ' bytes'); 
      }); 
     }); 
    } 

    else { 
     res.send('No image!'); 
    } 

}); 

回答

1

从我所了解的您试图发送消息到已经打开的浏览器窗口?

几件事情可以做,

  1. 阿贾克斯它,送岗位,并处理返回的信息。
  2. 提交它,你现在正在做的,但设置了闪光灯消息(看http://github.com/visionmedia/express-messages),要么res.render表单页面,或res.redirect到表单功能
  3. now.js或类似的解决方案。这将使客户端使用服务器端功能和服务器端代码来运行客户端功能。所以你会做什么将提交,传递后值到服务器端功能,它将处理它并触发客户端功能(显示一条消息)

对于我的钱选项#2可能是最安全的下注,因为没有启用javascript的客户端将能够使用它。至于可用性#1或#3将为最终用户提供更简化的外观。

1

您可以使用WebSockets。我建议使用Socket.IO,这很容易处理。在客户端,您将拥有一个事件处理程序,它将使用JavaScript将新信息附加到该页面。

然后,您可以有例如服务器说:

socket.emit('error', "Something happened while trying to upload, try again!"); 

和客户端将使用:

socket.on('error', function(data){ 
    //alert? 
    alert(data); 
}); 

http://socket.io/#how-to-use