0

我目前正在尝试从特定路由规则内的表单中捕获发布的值。由于所有其他关于此的 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
  }));

}
4

2 回答 2

0

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

// 导入控制器 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' });
于 2020-01-22T11:37:37.983 回答
0

Iron 路由器指南让我们知道这一点,this.request并且this.response是“NodeJS 请求和响应对象”。

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

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

来自Iron-router 的指南

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

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

Router.onBeforeAction(Iron.Router.bodyParser.urlencoded({
    extended: true
}));
于 2015-09-23T09:46:40.090 回答