Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js变量正在重置-未定义_Javascript_Node.js - Fatal编程技术网

Javascript Node.js变量正在重置-未定义

Javascript Node.js变量正在重置-未定义,javascript,node.js,Javascript,Node.js,我有一个由函数设置的全局变量(openTokSessionID)。当函数再次运行时,它应该检查是否设置了openTokSessionID。如果是,则应使用当前值。然而,它却抱怨openTokSessionID未定义。我的服务器代码如下。谢谢你的帮助 var http = require('http').createServer(handler), io = require('socket.io').listen(http).set('log level', 1), opentok = re

我有一个由函数设置的全局变量(openTokSessionID)。当函数再次运行时,它应该检查是否设置了openTokSessionID。如果是,则应使用当前值。然而,它却抱怨openTokSessionID未定义。我的服务器代码如下。谢谢你的帮助

var http = require('http').createServer(handler), 
io   = require('socket.io').listen(http).set('log level', 1),
opentok = require('opentok'),
key = '',    // Replace with your API key  
secret = '';  // Replace with your API secret  
var ot = new opentok.OpenTokSDK(key,secret);
ot.setEnvironment("staging.tokbox.com");
//ot.setEnvironment("api.opentok.com"); //only for production
http.listen(8080);
console.log('Chatserver listening on port 8080');

var nicknames = {};
var log = {};
var connectedUsersObject={};
var privateSessionObject={};
var data;
var openTokSessionID='';


function handler(req, res) {
  res.writeHead(200);
  res.end();
}

////////////////////////////////////////////SOCKET.IO FUNCTIONS///////////////////////////////////////////////////////
io.sockets.on('connection', function (socket) {
    socket.on('private message', function(data) {
        console.log('OpenTok Session ID is: ....' + openTokSessionID);
        if(data.messageType=='openTokDemoRequest'){ //if new session, create unique session ID, add to current chat object
            console.log(data.messageType + ' sender: ' + data.from);

            var location = '127.0.0.1'; // use an IP or 'localhost' 
            console.log('message type is: "openTokDemoRequest". openTokSessionID is: ' + openTokSessionID);
            var messageRecipient=data.from;
            if(openTokSessionID==''){
                console.log('The session ID is: ' + openTokSessionID + '++++++++');openTokSessionID= ot.create_session(location, function(openTokSessionID){

                    var data= {'to':messageRecipient, 'message':{'token': ot.generate_token({'session_id':openTokSessionID, 'role': "publisher"}), 'sessionID': openTokSessionID, 'apikey':key}, 'from': 'openTok', 'messageType':'demoTokenInfo', 'privateSessionID':''};
                    console.log('NEW session id is: ' + openTokSessionID + '. token is: ' + data.message.token);
                //  privateMessageSend(data);
                //  sendToUser(data);
                    connectedUsersObject[messageRecipient].emit('private message', data);
                    console.log ('message recipient is: ' + messageRecipient);
                }); 
            }
            else{
                console.log('OpenTok Session ID is: ////' + openTokSessionID);
                var data= {'to':messageRecipient, 'message':{'token': ot.generate_token({'session_id':openTokSessionID, 'role': "publisher"}), 'sessionID': openTokSessionID, 'apikey':key}, 'from': 'openTok', 'messageType':'demoTokenInfo', 'privateSessionID':''};
                console.log('session id is: ' + openTokSessionID + '. token is: ' + data.message.token);
                connectedUsersObject[messageRecipient].emit('private message', data);
                console.log ('message recipient is: ' + messageRecipient);
            }   

        }
    });

在这里,您试图使用异步调用的返回值,因此将变量设置为
undefined

openTokSessionID= ot.create_session(location, function(openTokSessionID){
...
因为您给回调参数的名称与您的变量的名称相同,所以它在回调中屏蔽了您的变量,所以第一次看起来还可以,但是您的实际变量被破坏了

您需要将其更改为以下内容:

ot.create_session(location, function(sessionID){
  openTokSessionID = sessionID;
...

要么我不了解Javascript的作用域,要么我犯了一个愚蠢的错误:)哪个语句生成了那个错误?console.log('OpenTok会话ID为:…'+OpenTok会话ID);第二次运行此函数时,它应该显示第一次运行时的会话id,但它显示的是“未定义”,即使它最初设置为“”。这是带斜杠还是不带斜杠的语句?该语句中没有斜杠就是这样-我没有意识到我不能用回调直接覆盖变量