我正在尝试将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>
答案 0 :(得分:2)
只需将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}
];