Javascript Hapi:fs.createWriteStream成功时导致页面刷新
我正在制作一个应用程序,使用Ember作为前端,使用Hapi作为后端。我有一个伪表单,当提交时,它只是向我的Hapi服务器发送一个帖子来上传一个文件,然后等待一个响应,告诉前端它上传到了哪里。我之所以说“pseudo form”,是因为表单没有Javascript Hapi:fs.createWriteStream成功时导致页面刷新,javascript,jquery,ajax,ember.js,hapijs,Javascript,Jquery,Ajax,Ember.js,Hapijs,我正在制作一个应用程序,使用Ember作为前端,使用Hapi作为后端。我有一个伪表单,当提交时,它只是向我的Hapi服务器发送一个帖子来上传一个文件,然后等待一个响应,告诉前端它上传到了哪里。我之所以说“pseudo form”,是因为表单没有action属性,而是处理提交单击以发送ajax请求 似乎出于某种原因,只需在服务器中调用fs.createWriteStream,就会导致客户端的浏览器在AJAX请求完成后刷新,而这对于我试图实现的目标是行不通的。有人知道为什么会这样吗 这是我的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(路径)代码>如果我只是回复(路径')代码>此处,然后从函数返回,它不会导致我的客户端上的页面刷新
下面是我对AJAX的调用,其中“fd”是一个FormData
实例,其中包含要上载的文件:
Ember.$.ajax( {
type: "POST",
url: "/submit",
data: fd,
success: function( image_path ) {
debugger;
}
} );
fs.createWriteStream
不太可能导致浏览器刷新,更可能是处理程序抛出错误,导致Ember刷新浏览器。我建议添加一个记录器,例如添加到hapi,这样您就可以看到服务器抛出的任何错误。我实际上发现,由于我的服务器目录与我的ember应用程序处于同一级别,ember也在监视服务器中的文件。无论何时添加任何内容(通过上传),ember都会看到服务器目录中的文件更改并刷新page@jas7457我已经试着解决这个问题好几个小时了。谢谢您应该将其作为一个答案。fs.createWriteStream
不太可能导致浏览器刷新,更可能是处理程序抛出错误,导致Ember刷新浏览器。我建议添加一个记录器,例如添加到hapi,这样您就可以看到服务器抛出的任何错误。我实际上发现,由于我的服务器目录与我的ember应用程序处于同一级别,ember也在监视服务器中的文件。无论何时添加任何内容(通过上传),ember都会看到服务器目录中的文件更改并刷新page@jas7457我已经试着解决这个问题好几个小时了。谢谢你应该把它作为一个答案