我正在制作一个应用程序,使用Ember作为我的前端,Hapi作为我的后端。我有一个伪表单,在提交时,只是向我的Hapi服务器发帖子上传文件并等待响应,告诉前端上传到哪里。我说“伪表单”,因为表单没有action
属性,而是处理提交点击以发送ajax请求。
似乎出于某种原因,简单地在服务器中调用fs.createWriteStream
将导致客户端的浏览器在AJAX请求完成后刷新,这对我正在尝试完成的内容不起作用。有谁知道为什么会这样?
这是我的Hapi服务器:
var Hapi = require( 'hapi' );
var fs = require( 'fs-extra' );
var uploads_directory = "/uploads/";
var server = new Hapi.Server();
server.connection( { host: 'localhost', port: 3000 } );
// Add the server routes
server.route( {
method: 'GET',
path: '/hello',
handler: function( request, reply ) {
return reply( 'hello world' );
}
} );
server.route( {
method: 'POST',
path: '/submit',
config: {
payload: {
output: 'stream',
parse: true,
allow: 'multipart/form-data'
},
handler: function( request, reply ) {
console.log( "Made it in the handler" );
var data = request.payload;
if( data.file ) {
console.log( "There is a file" );
var name = data.file.hapi.filename;
console.log( "Named " + name );
fs.ensureDirSync( __dirname + uploads_directory );
var path = __dirname + uploads_directory + name;
var file = fs.createWriteStream( path );
file.on( 'error', function( err ) {
console.error( err );
} );
data.file.pipe( file );
data.file.on( 'end', function( err ) {
reply( path );
} );
} else {
console.log( "There is no file" );
reply( "None" );
}
}
}
} );
server.start( function() {
console.log( 'Server running at:', server.info.uri );
} );
导致问题的行是var file = fs.createWriteStream( path );
如果我只是reply( path ');
这里然后从函数返回,它不会导致我的客户端上的页面刷新。
这是我对AJAX的调用,其中“fd”是保存要上传文件的FormData
实例:
Ember.$.ajax( {
type: "POST",
url: "/submit",
data: fd,
success: function( image_path ) {
debugger;
}
} );