2012-03-27 21 views
12

उदाहरण के लिए करने के लिए जा त्रुटियोंरोकें छवि लोड जावास्क्रिप्ट में जावास्क्रिप्ट कंसोल

var image = new Image(); 
image.onerror = function(e) { 
    // handle error my way 
} 
image.src = "http://bad.location.com/img.jp" 

मैं

e.preventDefault() 
return false 

की कोशिश की है, लेकिन अभी भी त्रुटि कंसोल के लिए लॉग होता है। हो सकता है कि यह इतनी बुरी बात नहीं है लेकिन मैं जो कर रहा हूं वह सर्वर पर फाइल अपलोड कर रहा है और फिर उन्हें प्रोसेस कर रहा है और एस 3 को कलाकृतियों को लोड कर रहा है। यह सब एक लंबा समय लगता है। मैं पृष्ठभूमि में ऐसा करता हूं और एस 3 यूआरएल को ब्राउजर में वापस लौटाता हूं और छवि का उपयोग करके छवि यूआरएल को पिंग करने के लिए कुछ जावास्क्रिप्ट का उपयोग करता हूं। यह पता लगाने के लिए आतंक कॉलबैक कि छवि एस 3 पर नहीं आती है या नहीं।

यह सब काम करता है लेकिन मुझे कंसोल त्रुटियों का भार मिलता है। यह थोड़ा बदसूरत है। इसे छिपाने के लिए कोई रास्ता है।

उत्तर

0

विचार साझा करने के लिए क्या मैं सिर्फ खोज की। :) चारों ओर गुगल करने में मदद नहीं मिली, इसलिए मैंने काफी समय बिताया और ऐसा लगता है कि यह इसके लायक है!

let static_path = path.join (__dirname, 'public'); 
app.use (require ('./middleware/missing-image') (static_path, 'img/path')); 
app.use (express.static (static_path)); 

एक्स स्थिति अभी है:

/* 
* Custom 404 middleware to handle missing image for certain routes 
*/ 

const path = require ('path'); 
const fs = require ('fs-extra'); 

// @root - root folder 
// @exclude - exclude folder 
module.exports = (root, exclude) => (req, res, next) => { 

    if (req.originalUrl.match (exclude)) { 
     fs.stat (path.join (root, req.originalUrl), function (err, stat) { 

      if (err === null) { 

       // if file exist call next = fallback to static handler 
       next(); 

      } else { 

       // if file does not exist, return a fake 200 img response 
       res.writeHead (200, { 
        'Content-Type' : 'image/png', 
        'Content-Length': 0, 
        'Cache-Control' : 'public, max-age=0', 
        'X-Status'  : '404' 
       }); 

       return res.end(); 
      } 
     }); 
    } else { 
     next(); 
    } 

}; 

तो फिर तुम इसे पसंद कॉल कर सकते हैं: वहाँ वास्तव में NodeJS में एक समाधान (अगर आप बैकएंड भी नियंत्रित कर)

उदाहरण के लिए है कस्टम हेडर जोड़ा गया ताकि आप क्लाइंट साइड जेएस में पता लगा सकें कि प्रतिक्रिया ओवरराइट की गई है।

नोट: res.end() का उपयोग फ़ॉलबैक छवि को भी स्ट्रीम करने के लिए किया जा सकता है।

संबंधित मुद्दे