2012-04-17 107 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