代码之家  ›  专栏  ›  技术社区  ›  SAB

WSGI与python eve[Errno 32]断管。。。Ajax调用

  •  0
  • SAB  · 技术社区  · 8 年前

    我正在运行一个简单的wsgi服务器,

    from run import app
    
    if __name__ == "__main__":
        app.run(threaded=True, debug=True)
    

    我用get请求点击服务器,服务器返回200条消息,但不返回任何数据。我收到以下错误消息

    Error on request:
    Traceback (most recent call last):
      File "/Library/Python/2.7/site-packages/werkzeug/serving.py", line 209, in run_wsgi
    execute(self.server.app)
      File "/Library/Python/2.7/site-packages/werkzeug/serving.py", line 200, in execute
    write(data)
      File "/Library/Python/2.7/site-packages/werkzeug/serving.py", line 175, in write
    self.send_header('Server', self.version_string())
     File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/BaseHTTPServer.py", line 401, in send_header
    self.wfile.write("%s: %s\r\n" % (keyword, value))
    IOError: [Errno 32] Broken pipe
    

    我在一些地方读到过,使用线程选项应该可以解决断管错误,但在我的情况下似乎没有帮助。有人有什么想法吗?

    烧瓶版本为0.12.2。

    因此,我正在开发的页面的重点是从传单地图中获取用户定义的坐标,并调用数据库,在本例中为neo4j。查询运行良好,API也运行良好,因为它在postman中运行良好。所以问题一定在我的网络应用程序中的某个地方。这是我的网页服务器应用程序。也许在Ajax调用中?

    from flask import Flask, render_template
    from flask_cors import CORS
    
    app = Flask(__name__)
    CORS(app)
    @app.route('/demo')
    def webMap():
        return render_template('demo3.html')
    
    if __name__ == '__main__':
        app.config['DEBUG'] = True
        app.run(host='localhost', port=8090)
    

    以下是JS:

    var map = L.map('map1').setView([51.506725, -0.076486], 12);
    
        L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
        attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://mapbox.com">Mapbox</a>',
        maxZoom: 18,
        id: 'mapbox.streets',
        accessToken: '*************************'
    }).addTo(map);
    
    
    //add start marker to map and delete old marker
    var startmarker = null;
    
    map.on('click', function (e) {
        if (startmarker !== null) {
            map.removeLayer(startmarker);
        }
         startmarker = L.marker(e.latlng, {
             title: "Start Point",
         }).addTo(map);
        startcoords = e.latlng.lng.toString() + "&" + e.latlng.lat.toString();
        startmarker.bindPopup("Start " + startcoords);
    });
    
    
    //add end marker to map and delete old marker
    
    var endmarker = null;
    map.on('contextmenu', function (e) {
        if (endmarker !== null) {
            map.removeLayer(endmarker);
        }
         endmarker = L.marker(e.latlng, {
             title: "End Point",
         }).addTo(map);
        endcoords = e.latlng.lng.toString() + "&" + e.latlng.lat.toString();
        endmarker.bindPopup("End " + endcoords);
        coords = startcoords+"&"+endcoords;
    });
    
    // choose query type, click button & Ajax call to API server
    
    $("#button").click(function() {
        var val = $('input[name=query]:checked').val()
        if (val == 'route') {
            stuff = $.ajax({
                url: "http://127.0.0.1:5000/route&"+coords,
                type: "GET",
                dataType: "json" ,      
            })
            .done(function( json ) {
                alert(JSON.stringify(stuff));  // trying to JSON back will work out how to display it after I get some data returned 
            })
            .fail(function( xhr, status, errorThrown ) {
                alert( "Sorry, there was a problem!");
                console.log( "Error: " + errorThrown );
                console.log( "Status: " + status );
                console.dir( xhr );
            })
            .always(function( xhr, status ) {
                alert( "The request is complete!" );
            });
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Nicola Iarocci    8 年前

    断开的管道表示flask进程想要与之对话的套接字或管道的另一端已断开。考虑到您正在与数据库交互,很可能数据库已终止连接,或者连接因其他原因已断开( Source )