Ich benutze hapijs Version 17.0.1. Ich versuche, ein Bild mit einer Ajax-Anfrage auf einer hapijs-Route hochzuladen. Hier ist meine AJAX-Code Profilbild hochladen:Profilbild hochladen in hapijs 17.0
var image_file_input = document.getElementById("user_profile_upload");
image_file_input.onchange = function() {
if(this.files != undefined)
{
if(this.files[0] != undefined)
{
var formData = tests.formdata ? new FormData() : null;
if (tests.formdata)
{
//alert(file)
formData.append('image_file', this.files[0]);
formData.append('userId', user_id);
formData.append('memberId', member_id);
}
$.ajax({
url: "/v1/User/uploadUserPic",
data: formData,
type: "POST",
dataType: "json",
contentType: false,
processData: false,
contentType: "multipart/form-data",
success: function(data){
console.log(data);
var errMsg = null;
var resData = null;
if(data.statusCode == 200)
{
resData = data.result;
}
else
{
alert(data.message)
}
},
error: function(error){
alert(error);
}
});
}
}
}
Und hier ist mein Hapijs Route Code:
var uploadUserPic = {
method: 'POST',
path: '/v1/Module/uploadUserPic',
config: {
description: 'Update Image For User',
tags: ['api', 'User'],
auth: 'session',
payload: {
output: 'stream',
parse: true,
allow: 'multipart/form-data'
},
validate: {
payload: {
userId : Joi.string().regex(/^[a-f\d]{24}$/i).required(),
memberId: Joi.string().required(),
image_file: Joi.object().required(),
},
failAction: FailCallBack
}
},
handler: function (request, reply) {
var resultData = null;
var error = null;
return new Promise(function (resolve) {
var multiparty = require('multiparty');
var fs = require('fs');
var form = new multiparty.Form();
form.parse(request.payload, function (err, fields, files) {
if(err)
{
error = err;
resolve();
}
else
{
var mkdirp = require('mkdirp');
var img_dir = "./files/users/";
mkdirp(img_dir, function (err) {
if (err)
{
error = err;
console.error(err);
resolve();
}
else
{
var oldpath = files.image_file.path;
var newpath = "./files/users/"+requestPayload.userId+".png";
fs.rename(oldpath, newpath, function (err) {
if(err)
{
error = err;
}
resolve();
});
}
});
}
});
}).then(function (err, result) {
if(err) return sendError(err);
if(error) return sendError(error)
return {
"statusCode": 200,
"success": true
};
});
}
}
Der obige Code gibt mir zu folgen Fehler cannot read property 'content-length' of undefined
on line form.parse(request.payload, function (err, fields, files) {});
Bitte lassen Sie mich Wenn ich etwas falsch mache. Wenn ich die URL in Ajax Anfrage durch eine andere URL ersetzen, die ich in PHP geschrieben habe, dann funktioniert es perfekt. was bedeutet, dass etwas mit meinem Code hapijs/nodejs nicht stimmt.
'sendError' formatiert gerade meinen Fehler. zweitens kenne ich sein "h" statt "antworten". aber ich habe von hapi 14 auf 17 upgegraded, also musste ich es im ganzen Projekt ändern. Auch "h" klingt für mich etwas peinlich. Also habe ich "reply" nur als Variablenbezeichnung betrachtet und die Eigenschaften/Funktion von 'h' mit' reply'-Variable aufgerufen. Übrigens Danke für die Hilfe, Kumpel. Ich werde Ihre Lösung überprüfen und auf Sie zurückkommen. –
Es funktionierte wie ein Charme Kumpel. Danke für Ihre Hilfe. Freut mich, deine Antwort zu akzeptieren. –
Kein Problem. Gut zu helfen: D –