0

我已经设法使用 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!');
    }

});
4

2 回答 2

1

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

你可以做的几件事,

  1. Ajax 它,发送帖子,并处理返回信息。
  2. 像现在一样提交它,但是设置一个 flash 消息(查看http://github.com/visionmedia/express-messages)并 res.render 表单页面,或者 res.redirect 到表单函数
  3. now.js 或类似的解决方案。这将允许客户端使用服务器端函数和服务器端代码来运行客户端函数。所以你要做的是提交,将帖子值传递给服务器端函数,服务器端函数将处理它并触发客户端函数(显示一条消息)

对于我来说,选项#2 可能是最安全的选择,因为没有启用 javascript 的客户将能够使用它。至于可用性#1 或#3 会给最终用户一个更流线型的外观。

于 2012-04-17T21:12:30.500 回答
1

您可以使用 WebSocket。我推荐使用 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

于 2012-04-17T23:07:39.127 回答