我正在使用Node.js的socket.io在我的Azure雲項目來落實聊天功能。在它中,我一直使用node.js將用戶聊天記錄添加到表格中。它工作正常,當我在我的本地模擬器上運行它,但奇怪的是,當我部署到我的天藍色的雲,它不工作,並沒有拋出任何錯誤,所以它真的讓人難以置信。以下是我的代碼。將節點部署到雲時,無法將實體添加到node.js中的天藍色存儲表中?
var app = require('express')()
, server = require('http').createServer(app)
, sio = require('socket.io')
, redis = require('redis');
var client = redis.createClient();
var io = sio.listen(server,{origins: '*:*'});
io.set("store", new sio.RedisStore);
process.env.AZURE_STORAGE_ACCOUNT = "account";
process.env.AZURE_STORAGE_ACCESS_KEY = "key";
var azure = require('azure');
var chatTableService = azure.createTableService();
createTable("ChatUser");
server.listen(4002);
socket.on('privateChat', function (data) {
var receiver = data.Receiver;
console.log(data.Username);
var chatGUID1 = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
var chatRecord1 = {
PartitionKey: data.Receiver,
RowKey: data.Username,
ChatID: chatGUID2,
Username: data.Receiver,
ChattedWithUsername: data.Username,
Timestamp: new Date(new Date().getTime())
};
console.log(chatRecord1.Timestamp);
queryEntity(chatRecord1);
}
function queryEntity(record1) {
chatTableService.queryEntity('ChatUser'
, record1.PartitionKey
, record1.RowKey
, function (error, entity) {
if (!error) {
console.log("Entity already exists")
}
else {
insertEntity(record1);
}
})
}
function insertEntity(record) {
chatTableService.insertEntity('ChatUser', record, function (error) {
if (!error) {
console.log("Entity inserted");
}
});
}
它的工作在我的本地模擬器但不是在雲和我碰到一個閱讀,創建雲表中的記錄時的實體的日期時間變量不應爲空來了。但我很確定傳遞時間戳的方式沒問題,它是正確的?任何其他想法,爲什麼它可能在本地而不是在雲上工作?
編輯:
當我運行socket.io服務器我甲肝也已經收到此錯誤,但儘管有這種錯誤的socket.io功能工作正常,所以我並沒有刻意去關心它。我不知道錯誤意味着什麼。
{ [Error: connect ECONNREFUSED]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect' }
首先,非常感謝您詳細的解答!雅我曾嘗試設置環境變量到我的本地天藍色存儲,它的工作原理。當我通過在Web角色上執行RDP直接從node.exe運行node.js腳本時,它也可以工作。但是當iisnode處理node.js腳本時它不起作用。奇怪! – Bitsian
我在E:目錄和approot中都放了一個iisnode.yml,但在approot文件夾中沒有日誌。我應該把它放在哪裏? – Bitsian
btw什麼是啓動socket.io服務器的最佳方式?通過命令提示符或通過iisnode? – Bitsian