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

时间:2017-01-08 23:35:08

标签: javascript jquery ajax ember.js hapijs

我正在制作一个应用程序,使用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;

    }
} );

0 个答案:

没有答案