使用connect-busboy和node / express检索字段

时间:2015-04-28 17:31:04

标签: node.js forms express

我在节点上很新。过去3天我一直在谷歌搜索。我在这里阅读了回答并尝试了解决方案(当我理解它们时) 我找不到/明白我的错误在哪里。我有最新版本的node / express和所有模块,安装这些最后几天(2015年4月) 我有一个简单的形式(使用getuikit的CSS)

extends layout
 block content
  <br>
  .uk-container
    form.uk-form-file(enctype="multipart/form-data")
      input.uk-hidden#what_to_do(type="text", name="what_to_do", value="load_files_disk")      
      button.uk-button Select a file
      input#upload-select-phys(type="file")
    br    
    if sessionFlash && sessionFlash.message
      div(class=sessionFlash.type)
        p <strong>FLASH!</strong> #{ sessionFlash.message }`

我的routes.js有get和post:

router.post('/load_files_disk',function(req, res) {
  var fstream;
  req.pipe(req.busboy);
   req.busboy.on('field', function(fieldname, val) {
   console.log('Field [' + fieldname + ']: value: ' + inspect(val));
  });  // nothing, doesnot come here
   req.busboy.on('file', function (fieldname, file, filename) {
        fstream = fs.createWriteStream(__dirname + '/../temp_files/' + filename);
        file.pipe(fstream);
        fstream.on('close', function () {
        });
    });
  req.busboy.on('finish', function() { 
     req.flash('success', 'This is a flash message');
     console.log('FLASH:' + req.flash('success')); // yes message OK
     res.redirect(303,'back');
  });
});
router.get('/load_file', function(req, res) {
        var d = new Date();
        console.log('date is + ', d.toUTCString());
        console.log('FLASH2:' + req.flash('success'));  // nothing!
    res.render('load_file', { user: req.user, sessionFlash: req.flash('success') });
});

我可以毫无问题地加载文件,但我从未看到过字段,控制台上没有任何内容,就像它甚至没有输入代码的那部分一样。 怎么了 ? 正如您所看到的,我还想发送一条flash消息(在我的代码的其他部分没有文件的情况下工作),但是没有传递req.flash。我不知道两者是否相关。 提前感谢您提供的任何提示 - 轻拍

2 个答案:

答案 0 :(得分:0)

如果您只是在浏览器中加载这些文件,您的router.js应该在您的服务器上,而不是在您的客户端上。我首先要查找Node上的教程(如https://github.com/workshopper/learnyounode),并完成足够的内容以便能够提供index.html。然后尝试从中提出请求。

如果没有更多的上下文(查看服务器端代码的其余部分,这个问题很难回答?),但我希望它有所帮助。

答案 1 :(得分:0)

我认为问题在于UIkit解析表单并将其发送到服务器的方式。相同的代码(表单,路由等),没有所有UIkit的东西完美地工作。 如果有人这样做并且有解决方案,我很高兴知道,现在我简化了我的表格并让它发挥作用。