Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Hapi:fs.createWriteStream成功时导致页面刷新_Javascript_Jquery_Ajax_Ember.js_Hapijs - Fatal编程技术网

Javascript Hapi:fs.createWriteStream成功时导致页面刷新

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

我正在制作一个应用程序,使用Ember作为前端,使用Hapi作为后端。我有一个伪表单,当提交时,它只是向我的Hapi服务器发送一个帖子来上传一个文件,然后等待一个响应,告诉前端它上传到了哪里。我之所以说“pseudo form”,是因为表单没有
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我已经试着解决这个问题好几个小时了。谢谢你应该把它作为一个答案