在Meteor中使用IronRouter解析urlencoded消息

时间:2016-01-25 13:58:44

标签: meteor email-integration

我正在使用http://mailin.io/doc来解析我(未来)Meteor应用程序的电子邮件。因此,我使用Iron-Router创建了一个webhook,它应该处理消息和附件。

使用以下代码,在控制台中写入{ }

  Router.route('/receive/', {where: 'server'})
  .post(function(req, res) {

   console.log(this.request.body);
});

我发现有些人报告了类似的问题,但提供的解决方案对我不起作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在链接中描述了正确的解决方法,似乎我也有另一个错误。以下代码为我做了诀窍:

if (Meteor.isServer) {
    var Busboy = Meteor.npmRequire("busboy"),
        fs = Npm.require("fs"),
        os = Npm.require("os"),
        path = Npm.require("path");

    Router.onBeforeAction(function (req, res, next) {
        var filenames = []; // Store filenames and then pass them to request.
        _.extend(req, {postData: {}});

        if (req.method === "POST") {
            var busboy = new Busboy({ headers: req.headers });
            busboy.on("file", function (fieldname, file, filename, encoding, mimetype) {
                var saveTo = path.join(os.tmpDir(), filename);
                file.pipe(fs.createWriteStream(saveTo));
                filenames.push(saveTo);
            });
            busboy.on("field", function(fieldname, value) {
                req.postData[fieldname] = value;
            });
            busboy.on("finish", function () {
                // Pass filenames to request
                req.filenames = filenames;
                next();
            });
            // Pass request to busboy
            req.pipe(busboy);
        } else {
            this.next();
        }
    });
}

并且所需的路线如下所示:

 Router.route('/receive/', {where: 'server'})
  .post(function() {

  // Use this.request.postData to access the message content
  postData = this.request.postData;
});
相关问题