将文本发送到浏览器

时间:2012-04-17 20:50:50

标签: node.js express pug

我已经设法使用Express在Node.js中进行文件上传工作,并且在代码中我正在检查用户是否正在尝试上传图像。

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

以下代码有效(res.send ...),但它会打开一个只包含该消息的新页面。

我的问题是:如何更改代码以便将邮件直接发送到HTML页面?如果它可能有用,我正在使用Jade。

提前致谢!

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!');
    }

});

2 个答案:

答案 0 :(得分:1)

根据我的理解,您正在尝试向已打开的浏览器窗口发送消息?

你可以做的一些事情,

  1. Ajax,发送帖子,并处理返回信息。
  2. 按照您现在的操作提交,但设置一条Flash消息(查看http://github.com/visionmedia/express-messages)并重新显示表单页面,或res.redirect到表单功能
  3. now.js或类似的解决方案。这将允许客户端使用服务器端功能和服务器端代码来运行客户端功能。那么你要做的就是提交,将post值传递给服务器端函数,该函数将处理它并触发客户端函数(显示消息)
  4. 对于我的钱选项#2可能是最安全的选择,因为没有启用javascript的客户端将能够使用它。至于可用性#1或#3将为最终用户提供更简化的外观。

答案 1 :(得分: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