【问题标题】:Iron Router parse posted valuesIron Router 解析发布的值
【发布时间】:2015-12-20 12:41:14
【问题描述】:

我目前正在尝试从特定路由规则内的表单中捕获发布的值。 由于所有其他关于此的 SO 帖子都不起作用,我想再问一次。您是否在您的项目中对此进行了整理和实施? Iron-Router@1.0.9 有解决方案吗?

this.request.body

路由规则中的上述代码总是返回未定义的。

 Router.route('/register', function(){
   console.log( JSON.stringify(this.request.body) );
   //this.render('test',{data:{data:this.request.body.username}})

 });







//SERVER ONLY
if (Meteor.isServer) {
  Meteor.methods({
    'addSong': function(songName) {
      var userId = Meteor.userId()
      songs.insert({
        userId: userId,
        name: songName
      })
    }

  })

  Router.onBeforeAction(Iron.Router.bodyParser.urlencoded({
    extended: true
  }));

}

【问题讨论】:

  • 我猜这是服务器端的,你能告诉我们一些代码吗?

标签: meteor iron-router body-parser


【解决方案1】:

铁路由器指南lets us know 认为this.request 和this.response 是“NodeJS 请求和响应对象”。

如果您查看req.body 的一些文档,您会发现:

默认情况下,它是未定义的,并在您使用时填充 body-parser 和 multer 等正文解析中间件。

来自Iron-router's guide:

IR 在 Iron.Router.bodyParser 上提供 express 的 body-parser。

所以你有它!如果你想填充this.request.body,你应该添加:

Router.onBeforeAction(Iron.Router.bodyParser.urlencoded({
    extended: true
}));

【讨论】:

    【解决方案2】:

    我为我的控制器创建了一个文件,以在控制器文件夹下维护代码可重用性名称为 solar.js,该太阳能文件具有我的数据库功能,并将请求和响应作为该文件的参数传递,例如 exports.getSolarInfo = (req ,res) => { console.log(req.body) },在这里你会得到你的 body 参数。然后在这里操作我们的功能,然后发送响应,如 response = { "status" : 0, "result" : "invalid query" } res.end(JSON.stringify(response));

    // 导入控制器 const SOLAR = require('./controllers/solar.js');

    Router.route( '/solar', function() {
      //setting header type to allow cross origin
      this.response.setHeader( 'Access-Control-Allow-Origin', '*' );
      if ( this.request.method === "OPTIONS" ) {
        this.response.setHeader( 'Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept' );
        this.response.setHeader( 'Access-Control-Allow-Methods', 'POST, PUT, GET, DELETE, OPTIONS' );
        this.response.end( 'Set OPTIONS.' );
      } else {
        SOLAR.getSolarInfo(this.request,this.response);
      }
    }, { where: 'server' });
    

    【讨论】:

    • 虽然此代码 sn-p 可能会解决问题并提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请考虑edit您的回答以添加一些解释,包括您所做的假设。
    • @ButchMonkey 我为我的控制器创建了一个文件,以在控制器文件夹下将代码可重用性名称维护为 solar.js,该太阳能文件具有我的数据库功能,并将请求和响应作为该文件的参数传递比如exports.getSolarInfo = (req,res) => { console.log(req.body) },在这里你会得到你的body参数。然后在这里操作我们的功能,然后发送响应,比如 response = { "status" : 0, "结果" : "无效查询" } res.end(JSON.stringify(response));
    • 请edit您的答案而不是评论,以便用户可以轻松理解您的代码的作用。
    猜你喜欢
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 2014-01-16
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    相关资源
    最近更新 更多