2013-01-16 99 views
3

我是Azure & node.js初學者。我試圖在node.js上執行文件上傳示例,但它不起作用,在blob.client.createContainerIfNotExists()node.js azure存儲blob

錯誤顯示:

Error: createContainerIfNotExists 

這意味着createContainerIfNotExists()顯示簡單的該錯誤情況。

不知我是否錯誤怎麼寫blob.client.createContainerIfNotExists()或者azure.createBlobService()不能成功。

node.js version v0.6.12 
express version 2.5.11 
azure version 0.5.3 

謝謝!

/**********************/ 
    File upload sample: 
/**********************/ 

var DEVSTORE_STORAGE_ACCOUNT = 'xxxxx'; 
var DEVSTORE_STORAGE_ACCESS_KEY= 'xxxx'; 
var DEVSTORE_BLOB_HOST = 'xxxxx'; 

var express = require('express') 
, routes = require('./routes'); 

var util = require('util'); 

// Azure module 
var azure = require('azure'); 
var blob = require('./blob.js'); 


// BLOB container 
blob.CONTAINER = 'nodejs'; 

// BLOB service 
blob.client = azure.createBlobService(
    DEVSTORE_STORAGE_ACCOUNT, 
    DEVSTORE_STORAGE_ACCESS_KEY, 
    DEVSTORE_BLOB_HOST); 

var app = module.exports = express.createServer(); 

// Configuration 

app.configure(function() { 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'ejs'); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    // app.use(express.logger()); 
    app.use(app.router); 
    app.use(express.static(__dirname + '/public')); 
}); 

app.configure('development', function(){ 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

app.configure('production', function(){ 
    app.use(express.errorHandler()); 
}); 

// Routes 

app.get('/', routes.index); 

// BLOB upload 
app.get('/upload', routes.upload); 

// BLOB upload 
app.post('/uploadtoblob', routes.uploadblob); 

// BLOB list 
app.get('/list', routes.listblobs); 

// BLOB delete 
app.post('/delete/:id', routes.deleteblob); 

// BLOB property 
app.get('/info/:id', routes.information); 

// BLOB container create 
blob.client.createContainerIfNotExists(blob.CONTAINER, function(err) { 
    if (err) { 
    console.log('Error : createContainerIfNotExists'); 
    process.exit(1); 
    } else { 

    blob.client.setContainerAcl(blob.CONTAINER,   azure.Constants.BlobConstants.BlobContainerPublicAccessType.BLOB, function(err) { 
     if(err) { 
    console.log('Error : setContainerAcl'); 
    process.exit(1); 
     } 
    }); 
    } 
}); 

var port = process.env.port || 3000; 
app.listen(port, function(){ 
    console.log("Express server listening on port %d in %s mode", app.address().port,  app.settings.env); 
}); 
+1

這可能是值得的追蹤器通過諸如Fiddler工具的請求/響應或記錄的細節實際錯誤。那會準確地告訴你爲什麼你的請求失敗。它可能會因任何原因失敗 - 無效的BLOB容器名稱,無效的憑據等。 –

+0

謝謝您的評論!我會嘗試。 – otogen

+0

你也可以在console.log中打印更多的數據(例如,輸出你得到的實際錯誤)。這可能僅僅是錯誤的證書,但是如果沒有更多的信息,就不可能進行調試。 –

回答

3

最新的azure sdk for node需要節點版本> 0.6.l5。我會建議升級sdk和你的節點版本。

你可以改變你的代碼如下得到具體錯誤的詳細信息:

的console.log( '錯誤:createContainerIfNotExists' + JSON.stringify(ERR));

您需要先在本地運行天藍存儲模擬器runnign 您需要爲應用程序可以使用的azure存儲帳戶提供憑據。通常通過AZURE_STORAGE_ACCOUNT和AZURE_STORAGE_ACCESS_KEY環境變量或通過將連接字符串傳遞給createBlobService工廠來完成。

有關設置使用BLOB存儲第一個應用程序的一步一步的樣本,請參見:

http://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/blob-storage/

+0

謝謝你的回答。我認爲這個問題完全是節點版本。 – otogen