【问题标题】:retrieving fields with connect-busboy and node/express使用 connect-busboy 和 node/express 检索字段
【发布时间】:2015-04-28 17:31:03
【问题描述】:

我对节点很陌生。最近三天我一直在谷歌搜索。我在这里阅读了回复并尝试了解决方案(当我理解它们时) 而且我找不到/不明白我的错误在哪里。我有最新版本的 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 没有通过。我不知道两者是否连接。 提前感谢您提供的任何提示 - 拍拍

【问题讨论】:

    标签: node.js forms express


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。但我相信我的 router.js 在我的服务器端,所有的日志记录都在服务器日志中。我也可以上传文件(它们进入服务器)。令我惊讶的是,我无法获得有关字段的任何信息,就像 req.busboy.on('file', function (fieldname, file, filename) {..} 从未“访问过”。某处出现错误在我的代码中阻止了这种情况,但我找不到在哪里。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-07-30
      • 2015-05-27
      • 2015-11-17
      • 2017-02-14
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      相关资源
      最近更新 更多