【问题标题】:hapijs getting form datahapijs 获取表单数据
【发布时间】:2015-03-04 00:48:47
【问题描述】:

我正在尝试将data 从我的form 获取到我的hapijs server。我好像没管。当我提交form 时,data 被传递为未定义,这会在服务器上触发错误。据我了解hapi 会自动解析数据。

有人可以帮我理解我做错了什么吗?为什么我变得不确定?

处理表单数据的函数是sendworkout

这些是我的路线:

var path = require('path');
var _ = require('underscore');
var couchbase = require('couchbase');

//Connect to database.

var db = db || new couchbase.Connection({host: 'localhost:8091', bucket: 'default'}, function(err) {
    if (err) {
      console.log('Connection Error', err);
    } else {
      console.log('Connected!');
  }
 });
console.log(db);
//We have a pending connection to the test database running on localhost.
//We now need to get notified if we connect successfully or if a connection error occurs


var landingPage = {
    handler: function(req, reply) {
        reply.file('index.html');
    }
};

var getWorkouts = {
    handler: function (req, reply) {
        // set options for databse query
        var q ={
          descending: true,
          stale: false
        };

        // show multiple exercises - db.view(designDocument, viewName, options)
        db.view('workout', 'exercise', q).query(function(err, values){
            // use pluck method from underscore to retrieve data
            var keys = _.pluck(values, 'id');
            console.log("Keys: " + keys);

            //fetch multiple documents based on the 'keys' object
            db.getMulti(keys, null, function(err, results){
                console.log('Results: ' + results);

                var workouts = [];
                for (var prop in results) {
                  workouts.push(results[prop].value);
                }
                reply(workouts);
            });
        });
    }
};


var getMusclegroup = {
  handler: function (req, reply) {
        var q = {
          descending: true,
          stale: false
        };

        db.view('workout', 'exercise', q).query(function(err, values){

            var keys = _.pluck(values, 'id');

            db.getMulti(keys, null, function(err, results){

                var muscleGroups = [];
                for (var prop in results) {
                    console.log(typeof results);
                    console.log(results[prop].value.workout);
                    muscleGroups.push(results[prop].value.workout);
                }
                reply(muscleGroups[0]);
            });
        });
    }
};


var sendWorkout = {
    handler: function(req, reply){


      var d = new Date();
      var cd = d.getDate() + "-" + (d.getMonth()+1) + "-" + d.getFullYear();

      console.log(req.method); // getting a post method - OK
      console.log(req.body); // returns undefined

      // defines unique key for data
      var key = cd;
      console.log(key);

      // adds payload to database
      db.add(key, req.body, function(error, results){
          if (error) {
              console.log("Coushbase error: " + error);
              reply(error + "\n");
          }
          console.log(results);
          reply(req.body);
      });
    }
};


var workoutNew = {
    handler: function (req, reply) {
      reply.file("static/html/workoutForm.html");
    },
};


module.exports = [
    {method: 'GET', path: '/static/{param*}', config: { handler: { directory: { path: 'static'}}}},
    {method: 'GET', path: '/', config: landingPage},
    {method: 'GET', path: '/workouts', config: getWorkouts},
    {method: 'GET', path: '/workouts/musclegroup', config: getMusclegroup},
    {method: 'GET', path: '/newworkout', config: workoutNew},
    {method: 'POST', path:'/newworkout/workout', config: sendWorkout}
];

这是我的服务器模块:

var Hapi = require('hapi');
var path = require('path');
var Joi = require('joi');
var rs = require('./lib/modules/routes.js');


var config= { };
var server = Hapi.createServer(process.env.PORT || 8080, config);

server.route(rs);

server.start(function(){
  console.log("Server started: " + server.info.uri);
});

module.exports = server;

这是我的 html 表单:

<div id="forms">
      <form id="workout-form" name="workout-form" action="newworkout/workout" method="POST">

          <div class="workouts">
              <label for="exercise" class="labels">Exercise</label><input type="text" name="exercise" id="exercise" placeholder="Which exercise?" autofocus />
              <label for="musclegroup" class="labels">Muscle-Group</label><input type="text" name="musclegroup" id="musclegroup" placeholder="Which muscle-group?" />

              <div class="sets">
                  <label for="reps" class="labels">Reps</label><input type="text" name="reps" id="reps" class="reps-column" placeholder="How many reps?" />
                  <label for="kilos" class="labels">Kg's</label><input type="text" name="kilos" id="kilos" class="kilos-column" placeholder="How much Kg?" />
              </div>
              <hr>
          </div>

          <button id="add-set"class="add-buttons" type="button"><i class="fa fa-plus-circle fa-2x"></i></button>
          <button id="add-exercise" class="add-buttons" type="button"><i class="fa fa-arrow-circle-down fa-2x"></i></button>
          <button id="submit-workout" type="submit" name="submitbutton"><strong>Save Workout</strong></button>
      </form>
  </div>

【问题讨论】:

  • 知道了!我所要做的就是用req.payload 替换req.body,它就成功了!
  • 不错,您应该自己添加答案并将其标记为正确@hyprstack,这样它就不会保持打开状态;)
  • @John 谢谢!刚刚添加了答案。

标签: database forms hapijs


【解决方案1】:

只需将req.body 替换为req.payload

var path = require('path');
var _ = require('underscore');
var couchbase = require('couchbase');

//Connect to database.

var db = db || new couchbase.Connection({host: 'localhost:8091', bucket: 'default'}, function(err) {
    if (err) {
      console.log('Connection Error', err);
    } else {
      console.log('Connected!');
  }
 });
console.log(db);
//We have a pending connection to the test database running on localhost.
//We now need to get notified if we connect successfully or if a connection error occurs


var landingPage = {
    handler: function(req, reply) {
        reply.file('index.html');
    }
};

var getWorkouts = {
    handler: function (req, reply) {
        // set options for databse query
        var q ={
          descending: true,
          stale: false
        };

        // show multiple exercises - db.view(designDocument, viewName, options)
        db.view('workout', 'exercise', q).query(function(err, values){
            // use pluck method from underscore to retrieve data
            var keys = _.pluck(values, 'id');
            console.log("Keys: " + keys);

            //fetch multiple documents based on the 'keys' object
            db.getMulti(keys, null, function(err, results){
                console.log('Results: ' + results);

                var workouts = [];
                for (var prop in results) {
                  workouts.push(results[prop].value);
                }
                reply(workouts);
            });
        });
    }
};


var getMusclegroup = {
  handler: function (req, reply) {
        var q = {
          descending: true,
          stale: false
        };

        db.view('workout', 'exercise', q).query(function(err, values){

            var keys = _.pluck(values, 'id');

            db.getMulti(keys, null, function(err, results){

                var muscleGroups = [];
                for (var prop in results) {
                    console.log(typeof results);
                    console.log(results[prop].value.workout);
                    muscleGroups.push(results[prop].value.workout);
                }
                reply(muscleGroups[0]);
            });
        });
    }
};


var sendWorkout = {
    handler: function(req, reply){


      var d = new Date();
      var cd = d.getDate() + "-" + (d.getMonth()+1) + "-" + d.getFullYear();

      console.log(req.method); // getting a post method - OK
      console.log(req.payload); 

      // defines unique key for data
      var key = cd;
      console.log(key);

      // adds payload to database
      db.add(key, req.payload, function(error, results){
          if (error) {
              console.log("Coushbase error: " + error);
              reply(error + "\n");
          }
          console.log(results);
          reply(req.payload);
      });
    }
};


var workoutNew = {
    handler: function (req, reply) {
      reply.file("static/html/workoutForm.html");
    },
};


module.exports = [
    {method: 'GET', path: '/static/{param*}', config: { handler: { directory: { path: 'static'}}}},
    {method: 'GET', path: '/', config: landingPage},
    {method: 'GET', path: '/workouts', config: getWorkouts},
    {method: 'GET', path: '/workouts/musclegroup', config: getMusclegroup},
    {method: 'GET', path: '/newworkout', config: workoutNew},
    {method: 'POST', path:'/newworkout/workout', config: sendWorkout}
];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2020-07-08
    • 2011-07-09
    • 2021-05-04
    相关资源
    最近更新 更多