Node.js: различия между версиями

Материал из support.qbpro.ru
imported>Vix
Нет описания правки
imported>Vix
 
(не показано 19 промежуточных версий этого же участника)
Строка 1: Строка 1:
process.nextTick(callback) - Гарантированно вызовет функцию callback в следующем цикле eventloop
 
==Документация JsDoc==
==Документация JsDoc==
[http://usejsdoc.org/ jdoc]
[http://usejsdoc.org/ jdoc]
Строка 45: Строка 45:


Next, attach it to a HTTP/HTTPS server. If you're using the fantastic express web framework:
Next, attach it to a HTTP/HTTPS server. If you're using the fantastic express web framework:
 
Express 3.x
Express 3.x
  var app = express()
 
  , server = require('http').createServer(app)
<nowiki>var app = express()
  , io = io.listen(server);
  , server = require('http').createServer(app)
  , io = io.listen(server);
server.listen(80);
 
server.listen(80);
io.sockets.on('connection', function (socket) {
 
  socket.emit('news', { hello: 'world' });
io.sockets.on('connection', function (socket) {
  socket.on('my other event', function (data) {
  socket.emit('news', { hello: 'world' });
    console.log(data);
  socket.on('my other event', function (data) {
  });
    console.log(data);
});
  });
});</nowiki>




Finally, load it from the client side code:
Finally, load it from the client side code:
 
  <nowiki><script src="/socket.io/socket.io.js"></script>
  <script src="/socket.io/socket.io.js"></script>
<script>
<script>
  var socket = io.connect('http://localhost');
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
  socket.on('news', function (data) {
    console.log(data);
    console.log(data);
    socket.emit('my other event', { my: 'data' });
    socket.emit('my other event', { my: 'data' });
  });
  });
</script></nowiki>
</script>
 
 
For more thorough examples, look at the examples/ directory.
For more thorough examples, look at the examples/ directory.


'''Примеры использования'''
'''Примеры использования'''
Строка 81: Строка 79:
Socket.IO allows you to emit and receive custom events. Besides connect, message and disconnect, you can emit custom events:
Socket.IO allows you to emit and receive custom events. Besides connect, message and disconnect, you can emit custom events:


// note, io.listen(<port>) will create a http server for you
// note, io.listen(<port>) will create a http server for you
var io = require('socket.io').listen(80);
var io = require('socket.io').listen(80);
 
io.sockets.on('connection', function (socket) {
io.sockets.on('connection', function (socket) {
  io.sockets.emit('this', { will: 'be received by everyone' });
  io.sockets.emit('this', { will: 'be received by everyone' });
 
  socket.on('private message', function (from, msg) {
  socket.on('private message', function (from, msg) {
    console.log('I received a private message by ', from, ' saying ', msg);
    console.log('I received a private message by ', from, ' saying ', msg);
  });
  });
  socket.on('disconnect', function () {
    io.sockets.emit('user disconnected');
  });
});


  socket.on('disconnect', function () {
    io.sockets.emit('user disconnected');
  });
});
Storing data associated to a client
Storing data associated to a client


Sometimes it's necessary to store data associated with a client that's necessary for the duration of the session.
Sometimes it's necessary to store data associated with a client that's necessary for the duration of the session.


Server side
'''Server side'''


var io = require('socket.io').listen(80);
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
  socket.on('set nickname', function (name) {
    socket.set('nickname', name, function () { socket.emit('ready'); });
  });
  socket.on('msg', function () {
    socket.get('nickname', function (err, name) {
      console.log('Chat message by ', name);
    });
  });
});


io.sockets.on('connection', function (socket) {
'''Client side'''
  socket.on('set nickname', function (name) {
    socket.set('nickname', name, function () { socket.emit('ready'); });
  });


  socket.on('msg', function () {
<script>
    socket.get('nickname', function (err, name) {
  var socket = io.connect('http://localhost');
      console.log('Chat message by ', name);
    });
  socket.on('connect', function () {
  });
    socket.emit('set nickname', prompt('What is your nickname?'));
});
    socket.on('ready', function () {
Client side
      console.log('Connected !');
 
      socket.emit('msg', prompt('What is your message?'));
<script>
    });
  var socket = io.connect('http://localhost');
  });
</script>


  socket.on('connect', function () {
    socket.emit('set nickname', prompt('What is your nickname?'));
    socket.on('ready', function () {
      console.log('Connected !');
      socket.emit('msg', prompt('What is your message?'));
    });
  });
</script>
Restricting yourself to a namespace
Restricting yourself to a namespace


Строка 137: Строка 138:
The following example defines a socket that listens on '/chat' and one for '/news':
The following example defines a socket that listens on '/chat' and one for '/news':


Server side
'''Server side'''


var io = require('socket.io').listen(80);
var io = require('socket.io').listen(80);
var chat = io
  .of('/chat')
  .on('connection', function (socket) {
    socket.emit('a message', { that: 'only', '/chat': 'will get' });
    chat.emit('a message', { everyone: 'in', '/chat': 'will get' });
  });
var news = io
  .of('/news');
  .on('connection', function (socket) {
    socket.emit('item', { news: 'item' });
  });


var chat = io
'''Client side:'''
  .of('/chat')
  .on('connection', function (socket) {
    socket.emit('a message', { that: 'only', '/chat': 'will get' });
    chat.emit('a message', { everyone: 'in', '/chat': 'will get' });
  });


var news = io
<script>
  .of('/news');
  var chat = io.connect('http://localhost/chat')
  .on('connection', function (socket) {
    , news = io.connect('http://localhost/news');
    socket.emit('item', { news: 'item' });
  });
  chat.on('connect', function () {
Client side:
    chat.emit('hi!');
 
  });
<script>
  var chat = io.connect('http://localhost/chat')
  news.on('news', function () {
    , news = io.connect('http://localhost/news');
    news.emit('woot');
 
  });
  chat.on('connect', function () {
</script>
    chat.emit('hi!');
  });


  news.on('news', function () {
    news.emit('woot');
  });
</script>
Sending volatile messages.
Sending volatile messages.


Строка 175: Строка 178:
In that case, you might want to send those messages as volatile messages.
In that case, you might want to send those messages as volatile messages.


Server side
'''Server side'''


var io = require('socket.io').listen(80);
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
  var tweets = setInterval(function () {
    getBieberTweet(function (tweet) {
      socket.volatile.emit('bieber tweet', tweet);
    });
  }, 100);
  socket.on('disconnect', function () {
    clearInterval(tweets);
  });
});


io.sockets.on('connection', function (socket) {
'''Client side'''
  var tweets = setInterval(function () {
    getBieberTweet(function (tweet) {
      socket.volatile.emit('bieber tweet', tweet);
    });
  }, 100);
 
  socket.on('disconnect', function () {
    clearInterval(tweets);
  });
});
Client side


In the client side, messages are received the same way whether they're volatile or not.
In the client side, messages are received the same way whether they're volatile or not.
Строка 200: Строка 204:
To do this, simply pass a function as the last parameter of .send or .emit. What's more, when you use .emit, the acknowledgement is done by you, which means you can also pass data along:
To do this, simply pass a function as the last parameter of .send or .emit. What's more, when you use .emit, the acknowledgement is done by you, which means you can also pass data along:


Server side
'''Server side'''


var io = require('socket.io').listen(80);
var io = require('socket.io').listen(80);
 
io.sockets.on('connection', function (socket) {
io.sockets.on('connection', function (socket) {
  socket.on('ferret', function (name, fn) {
  socket.on('ferret', function (name, fn) {
    fn('woot');
    fn('woot');
  });
  });
});
});
Client side
Client side
 
<script>
<script>
  var socket = io.connect(); // TIP: .connect with no args does auto-discovery
  var socket = io.connect(); // TIP: .connect with no args does auto-discovery
  socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
  socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
    socket.emit('ferret', 'tobi', function (data) {
    socket.emit('ferret', 'tobi', function (data) {
      console.log(data); // data will be 'woot'
      console.log(data); // data will be 'woot'
    });
    });
  });
  });
</script>
</script>
Broadcasting messages
'''Broadcasting messages'''


To broadcast, simply add a broadcast flag to emit and send method calls. Broadcasting means sending a message to everyone else except for the socket that starts it.
To broadcast, simply add a broadcast flag to emit and send method calls. Broadcasting means sending a message to everyone else except for the socket that starts it.


Server side
'''Server side'''


var io = require('socket.io').listen(80);
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
  socket.broadcast.emit('user connected');
  socket.broadcast.json.send({ a: 'message' });
});


io.sockets.on('connection', function (socket) {
'''Rooms'''
  socket.broadcast.emit('user connected');
  socket.broadcast.json.send({ a: 'message' });
});
Rooms


Sometimes you want to put certain sockets in the same room, so that it's easy to broadcast to all of them together.
Sometimes you want to put certain sockets in the same room, so that it's easy to broadcast to all of them together.
Строка 237: Строка 242:
Think of this as built-in channels for sockets. Sockets join and leave rooms in each socket.
Think of this as built-in channels for sockets. Sockets join and leave rooms in each socket.


Server side
'''Server side'''


var io = require('socket.io').listen(80);
var io = require('socket.io').listen(80);
 
io.sockets.on('connection', function (socket) {
io.sockets.on('connection', function (socket) {
  socket.join('justin bieber fans');
  socket.join('justin bieber fans');
  socket.broadcast.to('justin bieber fans').emit('new fan');
  socket.broadcast.to('justin bieber fans').emit('new fan');
  io.sockets.in('rammstein fans').emit('new non-fan');
  io.sockets.in('rammstein fans').emit('new non-fan');
});
});
Using it just as a cross-browser WebSocket
Using it just as a cross-browser WebSocket


If you just want the WebSocket semantics, you can do that too. Simply leverage send and listen on the message event:
If you just want the WebSocket semantics, you can do that too. Simply leverage send and listen on the message event:


Server side
'''Server side'''


var io = require('socket.io').listen(80);
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
  socket.on('message', function () { });
  socket.on('disconnect', function () { });
});


io.sockets.on('connection', function (socket) {
'''Client side'''
  socket.on('message', function () { });
  socket.on('disconnect', function () { });
<script>
});
  var socket = io.connect('http://localhost/');
Client side
  socket.on('connect', function () {
 
    socket.send('hi');
<script>
  var socket = io.connect('http://localhost/');
    socket.on('message', function (msg) {
  socket.on('connect', function () {
      // my msg
    socket.send('hi');
    });
 
  });
    socket.on('message', function (msg) {
</script>
      // my msg
    });
  });
</script>
Changing configuration
Changing configuration


Configuration in socket.io is TJ-style:
Configuration in socket.io is TJ-style:


Server side
'''Server side'''


var io = require('socket.io').listen(80);
var io = require('socket.io').listen(80);
 
io.configure(function () {
io.configure(function () {
  io.set('transports', ['websocket', 'flashsocket', 'xhr-polling']);
  io.set('transports', ['websocket', 'flashsocket', 'xhr-polling']);
});
});
 
io.configure('development', function () {
io.configure('development', function () {
  io.set('transports', ['websocket', 'xhr-polling']);
  io.set('transports', ['websocket', 'xhr-polling']);
  io.enable('log');
  io.enable('log');
});
});
====Перевод документации с оф. сайта====
====Перевод документации с оф. сайта====
'''Использование Node HTTP server'''
'''Использование Node HTTP server'''
Строка 453: Строка 459:


''''SERVER'''''
''''SERVER'''''
 
  <nowiki>var io = require('socket.io').listen(80);
  var io = require('socket.io').listen(80);
 
var chat = io
var chat = io
  .of('/chat')
  .of('/chat')
  .on('connection', function (socket) {
  .on('connection', function (socket) {
    socket.emit('a message', {
    socket.emit('a message', {
        that: 'only'
        that: 'only'
      , '/chat': 'will get'
      , '/chat': 'will get'
    });
    });
    chat.emit('a message', {
    chat.emit('a message', {
        everyone: 'in'
        everyone: 'in'
      , '/chat': 'will get'
      , '/chat': 'will get'
    });
    });
  });
  });
 
var news = io
var news = io
  .of('/news')
  .of('/news')
  .on('connection', function (socket) {
  .on('connection', function (socket) {
    socket.emit('item', { news: 'item' });
    socket.emit('item', { news: 'item' });
  });</nowiki>
  });
'''''CLIENT'''''
'''''CLIENT'''''


Строка 499: Строка 505:
'''''SERVER'''''
'''''SERVER'''''


  <nowiki>var io = require('socket.io').listen(80);
  var io = require('socket.io').listen(80);
 
io.sockets.on('connection', function (socket) {
io.sockets.on('connection', function (socket) {
  var tweets = setInterval(function () {
  var tweets = setInterval(function () {
    getBieberTweet(function (tweet) {
    getBieberTweet(function (tweet) {
      socket.volatile.emit('bieber tweet', tweet);
      socket.volatile.emit('bieber tweet', tweet);
    });
    });
  }, 100);
  }, 100);
 
  socket.on('disconnect', function () {
  socket.on('disconnect', function () {
    clearInterval(tweets);
    clearInterval(tweets);
  });
  });
});</nowiki>
});
 
'''Отправка и получение данных (подтверждения)'''
'''Отправка и получение данных (подтверждения)'''


Строка 520: Строка 526:


'''''SERVER'''''
'''''SERVER'''''
 
  var io = require('socket.io').listen(80);
  <nowiki>var io = require('socket.io').listen(80);
 
io.sockets.on('connection', function (socket) {
io.sockets.on('connection', function (socket) {
  socket.on('ferret', function (name, fn) {
  socket.on('ferret', function (name, fn) {
    fn('woot');
    fn('woot');
  });
  });
});
});</nowiki>


'''''CLIENT'''''
'''''CLIENT'''''


  <nowiki><script>
  <script>
   var socket = io.connect(); // TIP: .connect with no args does auto-discovery
   var socket = io.connect(); // TIP: .connect with no args does auto-discovery
   socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
   socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
Строка 538: Строка 543:
     });
     });
   });
   });
  </script></nowiki>
  </script>


'''Broadcasting messages.'''
'''Broadcasting messages.'''
Строка 546: Строка 551:
'''''SERVER'''''
'''''SERVER'''''


  <nowiki>var io = require('socket.io').listen(80);
  var io = require('socket.io').listen(80);
 
io.sockets.on('connection', function (socket) {
io.sockets.on('connection', function (socket) {
  socket.broadcast.emit('user connected');
  socket.broadcast.emit('user connected');
});</nowiki>
});


'''Using it just as a cross-browser WebSocket.'''  
'''Using it just as a cross-browser WebSocket.'''  
Строка 558: Строка 563:
'''''SERVER'''''
'''''SERVER'''''


  <nowiki>var io = require('socket.io').listen(80);
  var io = require('socket.io').listen(80);
 
io.sockets.on('connection', function (socket) {
io.sockets.on('connection', function (socket) {
  socket.on('message', function () { });
  socket.on('message', function () { });
  socket.on('disconnect', function () { });
  socket.on('disconnect', function () { });
});</nowiki>
});


'''''CLIENT'''''
'''''CLIENT'''''
<script>
  var socket = io.connect('http://localhost/');
  socket.on('connect', function () {
    socket.send('hi');
    socket.on('message', function (msg) {
      // my msg
    });
  });
</script>


<nowiki><script>
====Примеры кода====
  var socket = io.connect('http://localhost/');
  socket.on('connect', function () {
    socket.send('hi');


    socket.on('message', function (msg) {
'''process.nextTick(callback)''' - Гарантированно вызовет функцию '''callback''' в следующем цикле '''eventloop'''
      // my msg
    });
  });
</script></nowiki>
 
====Примеры кода====


http://kuroikaze85.wordpress.com/2010/06/15/socket-io-node-js-game-making/
http://kuroikaze85.wordpress.com/2010/06/15/socket-io-node-js-game-making/
[http://www.ibm.com/developerworks/ru/library/cl-nodejscloud/ Применение Node.js в качестве полной среды разработки для облачных решений]
[http://www.ibm.com/developerworks/ru/library/cl-nodejscloud/ Применение Node.js в качестве полной среды разработки для облачных решений]
<hr>
<hr>
==Официальная документция==
==Официальная документция==


Строка 595: Строка 602:


==АКСИОМЫ NODE.JS==
==АКСИОМЫ NODE.JS==
Callback-driven парадигма
'''Callback-driven''' парадигма


Неблокирующая функция принимает callback последним аргументом:
Неблокирующая функция принимает '''callback''' последним аргументом:


  <nowiki>function asuncFunction(arg1,arg2,...,argN, callback){
  <nowiki>function asuncFunction(arg1,arg2,...,argN, callback){
Строка 603: Строка 610:
}</nowiki>
}</nowiki>


Callback принимает ошибку первым аргументом, остальные результат:
'''Callback''' принимает ошибку первым аргументом, остальные результат:


  <nowiki>function callback(error, result1,result2,...resultN){
  <nowiki>function callback(error, result1,result2,...resultN){
Строка 696: Строка 703:


== Полезные ресурсы ==
== Полезные ресурсы ==
* [https://computingforgeeks.com/installing-node-js-10-lts-on-ubuntu-18-04-16-04-debian-9/ Installing Node.js 10 LTS on Ubuntu 18.04 / 16.04 / Debian 9]
* [http://nodejs.org/download/ node.js]
* [http://nodejs.org/download/ node.js]
* [http://nodejs.ru/707 коротко о всех командах node.js]
* [http://nodejs.ru/707 коротко о всех командах node.js]
<br>
 
* [http://www.askdev.ru/blog/nodejs/54/Отличное-руководство-для-начинающих-по-Node-js/ полезное на старте.]
* [http://www.askdev.ru/blog/nodejs/54/Отличное-руководство-для-начинающих-по-Node-js/ полезное на старте.]
* [http://vremenno.net/js/node-js-for-beginners/ примеры кода]
* [http://vremenno.net/js/node-js-for-beginners/ примеры кода]
* [http://habrahabr.ru/post/102717/ примеры с Хабра]
* [http://habrahabr.ru/post/102717/ примеры с Хабра]
* [http://drumcoder.co.uk/blog/2011/jan/10/nodejs-phone-book/ пример работы с postgresql]
* [http://drumcoder.co.uk/blog/2011/jan/10/nodejs-phone-book/ пример работы с postgresql]
<br>
 
* [http://jade-lang.com/ .. не все понял но здорово.."шаблнизатор"]
* [http://jade-lang.com/ .. не все понял но здорово.."шаблнизатор"]
* [https://github.com/visionmedia/jade#readme описание шаблонизатора..]
* [https://github.com/visionmedia/jade#readme описание шаблонизатора..]
Строка 718: Строка 726:
* [http://nodejs.ru/doc/v0.4.x/debugger.html встроенный отладчик]
* [http://nodejs.ru/doc/v0.4.x/debugger.html встроенный отладчик]
* [http://nodejs.ru/324 Ndb отладка в node]
* [http://nodejs.ru/324 Ndb отладка в node]
* [http://qaru.site/questions/13145/nodejs-best-practice-exception-handling '''Node.js Обработка исключений при передовой практике''']
<hr>
<hr>
* [[Node.js debian init.script]]
* [[Node.js debian init.script]]
Строка 728: Строка 737:


==10 типичных ошибок Node.js разработчиков==
==10 типичных ошибок Node.js разработчиков==
* [https://itnan.ru/post.php?c=1&p=255895 10 основных ошибок при разработке на Node.js]
* [https://makeomatic.ru/blog/2015/05/25/10_mistakes_2_node/ 10 типичных ошибок Node.js разработчиков (Часть 2)]
* [https://makeomatic.ru/blog/2015/05/25/10_mistakes_2_node/ 10 типичных ошибок Node.js разработчиков (Часть 2)]


Строка 734: Строка 744:
*[https://medium.com/@evilj0e/%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-node-js-b575bd5e47e#.v28lno7uk Масштабирование - Recluster]
*[https://medium.com/@evilj0e/%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-node-js-b575bd5e47e#.v28lno7uk Масштабирование - Recluster]
*[http://www.w3ii.com/ru/nodejs/nodejs_domain_module.html w3ii.com]
*[http://www.w3ii.com/ru/nodejs/nodejs_domain_module.html w3ii.com]
==Различные источники==
* [https://ciphertrick.com/2015/02/25/get-post-requests-in-node-js-using-express-4/ GET & POST Requests in Node.js]
* [https://www.codementor.io/codementorteam/how-to-use-json-files-in-node-js-85hndqt32 How to Use JSON files in Node.js]
==Использование MD5==
Examples:
1)
var filename = process.argv[2];
var crypto = require('crypto');
var fs = require('fs');
var md5sum = crypto.createHash('md5');
var s = fs.ReadStream(filename);
s.on('data', function(d) {
  md5sum.update(d);
});
s.on('end', function() {
  var d = md5sum.digest('hex');
  console.log(d + '  ' + filename);
});
2)
var crypto = require('crypto');
var name = 'braitsch';
var hash = crypto.createHash('md5').update(name).digest('hex');
console.log(hash); // 9b74c9897bac770ffc029102a200c5de
3)
$ npm install sha1
and then
var sha1 = require('sha1');
var hash = sha1("my message");
console.log(hash); // 104ab42f1193c336aa2cf08a2c946d5c6fd0fcdb
or
$ npm install md5
and then
var md5 = require('md5');
var hash = md5("my message");
console.log(hash); // 8ba6c19dc1def5702ff5acbf2aeea5aa
4)
const crypto = require('crypto');
const sha256 = x => crypto.createHash('sha256').update(x, 'utf8').digest('hex');
sha256('Hello, world. ');
5)
function encrypt(text,password){
  var cipher = crypto.createCipher(algorithm,password)
  var crypted = cipher.update(text,'utf8','hex')
  crypted += cipher.final('hex');
  return crypted;
}
function decrypt(text,password){
  var decipher = crypto.createDecipher(algorithm,password)
  var dec = decipher.update(text,'hex','utf8')
  dec += decipher.final('utf8');
  return dec;
}
function hashText(text){
    var hash = crypto.createHash('md5').update(text).digest("hex");
    //console.log(hash);
    return hash;
}
function encryptThenAuthenticate(plainText,pw)
{
    var encryptedText = encrypt(plainText,pw);
    var hash = hashText(encryptedText);
    return encryptedText+"$"+hash;
}
function VerifyThenDecrypt(encryptedAndAuthenticatedText,pw)
{
    var encryptedAndHashArray = encryptedAndAuthenticatedText.split("$");
    var encrypted = encryptedAndHashArray[0];
    var hash = encryptedAndHashArray[1];
    var hash2Compare = hashText(encrypted);
    if (hash === hash2Compare)
    {
        return decrypt(encrypted,pw);
    }
}
It can be tested with:
var doom = encryptThenAuthenticate("The encrypted text",user.cryptoPassword);
console.log(VerifyThenDecrypt(doom,user.cryptoPassword));
== получить MAC-адрес текущего компьютера с node.js ==
В NodeJS ≥ 0.11 адрес MAC для каждого сетевого интерфейса находится на выходе os.networkInterfaces(), например.
1. Пример:
require('os').networkInterfaces()
{ eth0:
    [ { address: 'fe80::cae0:ebff:fe14:1dab',
        netmask: 'ffff:ffff:ffff:ffff::',
        family: 'IPv6',
        mac: 'c8:e0:eb:14:1d:ab',
        scopeid: 4,
        internal: false },
      { address: '192.168.178.22',
        netmask: '255.255.255.0',
        family: 'IPv4',
        mac: 'c8:e0:eb:14:1d:ab',
        internal: false } ] }
В NodeJS ≤ 0,10 вам нужно узнать собственные адреса mac, но есть пакеты, которые помогут вам в этом:<br>
'''node-macaddress''' (отказ от ответственности: я я автор этого пакета).
2. Пример:
В режиме node ≥ 0.11 вам не требуется использовать асинхронную версию:
var addr = require('node-macaddress').one();
Поскольку вас обычно интересует только "macaddress хостов" (хотя нет такой вещи, как хост может иметь несколько сетевых интерфейсов,<br>
каждый из которых имеет отдельный MAC-адрес), этот вызов даст вам именно это.
==Проблемы и их решения==
'''* Проблема:''' <br>
'''DeprecationWarning: `node --debug` and `node --debug-brk` are invalid. Please use `node --inspect` or `node --inspect-brk` instead.'''
'''* Решение:'''
1. Переименовываем бинарный файл /usr/local/bin/node в node_bin
mv /usr/local/bin/node  /usr/local/bin/node_bin
2. Создаем скрипт в bash:
echo > /usr/local/bin/node
editor /usr/local/bin/node
3. Вставляем скрипт:
#!/bin/bash
## the script converting parameters for nodejs new version
##
new_name="'''node_bin'''";
eval _options="(" $(echo -e $@) ")"
_node=$(whereis -b $new_name|awk '/^'$new_name':/{print $2}');                                                                             
eval _version="(" $(echo -e $($_node --version|sed 's/[^0-9]/ /g')) ")";                                                                   
# local values                                                                                                                             
old_options=( "--debug" "--debug-brk" );                                                                                                   
new_options=( "--inspect" "--inspect-brk" );                                                                                               
_opt=();                                                                                                                                   
                                                                                                                                           
function filtr() {                                                                                                                         
    _opt=${_options[@]};                                                                                                                   
    for ((get_i=0; get_i != ${#old_options[@]}; get_i++))                                                                                 
        do                                                                                                                                 
        if [ ${new_options[$get_i]} = "" ];
            then
                _opt=${_opt[@]};
            else
                _opt=$( echo -e ${_opt[@]}|sed 's/'${old_options[$get_i]}'/'${new_options[$get_i]}'/g');
        fi
    done
}
function convert() {
if [ $(echo -e ${#_options[@]}) = 0 ];
    then
        $_node;
    else
      filtr;
   
        $_node $(echo -e ${_opt[@]})
fi
exit 0;
}
if (( ${_version[0]} >= 7 ));
  then
    convert;
fi
exit 0;
* '''Обратите внимание на выделенное имя - node_bin''', в скрипте будет поиск именно такого имени бинарного файла '''nodejs''',<br>
если у вас иное укажите в параметре скрипта.
4. Даем права на запуск скрипта:
chmod ugo+x /usr/local/bin/node
Все. Теперь если версия nodejs больше или равна 7.х.х - то автоматически параметры <br>
--debug и --debug-brk будут на лету меняться на --inspect и --inspect-brk.
Данное решение на какое то время решит вашу проблему, но обновление среды '''IDE''' скорее всего неизбежно.<br>
Я столкнулся с этим в '''netbeans'''.
Источники:
<hr>
* [https://www.npmjs.com/package/md5 MD5 - npm]
* [https://stackoverflow.com/questions/5878682/node-js-hash-string Crypto on stackoverflow.com]
* [http://comp-security.net/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-md5/ описание MD5]
* [https://habr.com/post/217901/ Пример использования module.exports]
* [http://qaru.site/questions/593116/get-the-mac-address-of-the-current-machine-with-nodejs-using-getmac  получить MAC-адрес текущего компьютера с node.js]

Текущая версия от 16:05, 15 марта 2019

Документация JsDoc

jdoc

Серверный JavaScript

Руководство NodeJS Node.js Virtual Machine (vm) Usage (перевод)

Node.JS Parent Process ID

Is it possible to get the parent process-id using Node.JS? I would like to detect if the parent is killed or fails in such a way that it cannot notify the child. If this happens, the parent process id of the child should become 1.

This would be preferable to requiring the parent to periodically send a keep-alive signal and also preferable to running the ps command.

@Emmerman: I'm not sure what you mean. The parent runs require('child_process').spawn(process.argv[0], ['path_to_child.js']) in order to start the child. Then if it needs to talk to the child, it uses the stdin and stdout of the child. stderr is piped to a log. I am guessing the answer would be yes?
  • You can use pid-file. Something like that
var util = require('util'),
    fs = require('fs'),
    pidfile = '/var/run/nodemaster.pid';

try {
    var pid = fs.readFileSync(pidfile);
    //REPLACE with your signal or use another method to check process existence :)
    process.kill(pid, 'SIGUSR2'); 
    util.puts('Master already running');
    process.exit(1);
} catch (e) {
    fs.writeFileSync(pidfile, process.pid.toString(), 'ascii');
}

//run your childs here

Библиотеки

Socket.IO

Socket.IO is a Node.JS project that makes WebSockets and realtime possible in all browsers. It also enhances WebSockets by providing built-in multiplexing, horizontal scalability, automatic JSON encoding/decoding, and more.

Установка

npm install socket.io

Использование

First, require socket.io:

var io = require('socket.io');

Next, attach it to a HTTP/HTTPS server. If you're using the fantastic express web framework:

Express 3.x
 var app = express()
  , server = require('http').createServer(app)
  , io = io.listen(server);

server.listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});


Finally, load it from the client side code:

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>
 
For more thorough examples, look at the examples/ directory.

Примеры использования

Sending and receiving events.

Socket.IO allows you to emit and receive custom events. Besides connect, message and disconnect, you can emit custom events:

// note, io.listen(<port>) will create a http server for you
var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  io.sockets.emit('this', { will: 'be received by everyone' });

  socket.on('private message', function (from, msg) {
    console.log('I received a private message by ', from, ' saying ', msg);
  });

  socket.on('disconnect', function () {
    io.sockets.emit('user disconnected');
  });
});

Storing data associated to a client

Sometimes it's necessary to store data associated with a client that's necessary for the duration of the session.

Server side

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.on('set nickname', function (name) {
    socket.set('nickname', name, function () { socket.emit('ready'); });
  });

  socket.on('msg', function () {
    socket.get('nickname', function (err, name) {
      console.log('Chat message by ', name);
    });
  });
});

Client side

<script>
  var socket = io.connect('http://localhost');

  socket.on('connect', function () {
    socket.emit('set nickname', prompt('What is your nickname?'));
    socket.on('ready', function () {
      console.log('Connected !');
      socket.emit('msg', prompt('What is your message?'));
    });
  });
</script>

Restricting yourself to a namespace

If you have control over all the messages and events emitted for a particular application, using the default / namespace works.

If you want to leverage 3rd-party code, or produce code to share with others, socket.io provides a way of namespacing a socket.

This has the benefit of multiplexing a single connection. Instead of socket.io using two WebSocket connections, it'll use one.

The following example defines a socket that listens on '/chat' and one for '/news':

Server side

var io = require('socket.io').listen(80);

var chat = io
  .of('/chat')
  .on('connection', function (socket) {
    socket.emit('a message', { that: 'only', '/chat': 'will get' });
    chat.emit('a message', { everyone: 'in', '/chat': 'will get' });
  });

var news = io
  .of('/news');
  .on('connection', function (socket) {
    socket.emit('item', { news: 'item' });
  });

Client side:

<script>
  var chat = io.connect('http://localhost/chat')
    , news = io.connect('http://localhost/news');

  chat.on('connect', function () {
    chat.emit('hi!');
  });

  news.on('news', function () {
    news.emit('woot');
  });
</script>

Sending volatile messages.

Sometimes certain messages can be dropped. Let's say you have an app that shows realtime tweets for the keyword bieber.

If a certain client is not ready to receive messages (because of network slowness or other issues, or because he's connected through long polling and is in the middle of a request-response cycle), if he doesn't receive ALL the tweets related to bieber your application won't suffer.

In that case, you might want to send those messages as volatile messages.

Server side

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  var tweets = setInterval(function () {
    getBieberTweet(function (tweet) {
      socket.volatile.emit('bieber tweet', tweet);
    });
  }, 100);

  socket.on('disconnect', function () {
    clearInterval(tweets);
  });
});

Client side

In the client side, messages are received the same way whether they're volatile or not.

Getting acknowledgements

Sometimes, you might want to get a callback when the client confirmed the message reception.

To do this, simply pass a function as the last parameter of .send or .emit. What's more, when you use .emit, the acknowledgement is done by you, which means you can also pass data along:

Server side

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.on('ferret', function (name, fn) {
    fn('woot');
  });
});
Client side

<script>
  var socket = io.connect(); // TIP: .connect with no args does auto-discovery
  socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
    socket.emit('ferret', 'tobi', function (data) {
      console.log(data); // data will be 'woot'
    });
  });
</script>

Broadcasting messages

To broadcast, simply add a broadcast flag to emit and send method calls. Broadcasting means sending a message to everyone else except for the socket that starts it.

Server side

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.broadcast.emit('user connected');
  socket.broadcast.json.send({ a: 'message' });
});

Rooms

Sometimes you want to put certain sockets in the same room, so that it's easy to broadcast to all of them together.

Think of this as built-in channels for sockets. Sockets join and leave rooms in each socket.

Server side

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.join('justin bieber fans');
  socket.broadcast.to('justin bieber fans').emit('new fan');
  io.sockets.in('rammstein fans').emit('new non-fan');
});
Using it just as a cross-browser WebSocket

If you just want the WebSocket semantics, you can do that too. Simply leverage send and listen on the message event:

Server side

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.on('message', function () { });
  socket.on('disconnect', function () { });
});

Client side

<script>
  var socket = io.connect('http://localhost/');
  socket.on('connect', function () {
    socket.send('hi');

    socket.on('message', function (msg) {
      // my msg
    });
  });
</script>

Changing configuration

Configuration in socket.io is TJ-style:

Server side

var io = require('socket.io').listen(80);

io.configure(function () {
  io.set('transports', ['websocket', 'flashsocket', 'xhr-polling']);
});

io.configure('development', function () {
  io.set('transports', ['websocket', 'xhr-polling']);
  io.enable('log');
});

Перевод документации с оф. сайта

Использование Node HTTP server

Установить npm install socket.io

SERVER (APP.JS)

var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')
 
 app.listen(80);
 
 function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }
    res.writeHead(200);
    res.end(data);
  });
 }
 
 io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
 });

CLIENT (INDEX.HTML)

<script src="/socket.io/socket.io.js"></script>
 <script>
  var socket = io.connect('http://localhost');
  
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
 </script>

Использование совместно с Express 3 web framework

Express 3 requires that you instantiate a `http.Server` to attach socket.io to first:


SERVER (APP.JS)

var app = require('express')()
 , server = require('http').createServer(app)
 , io = require('socket.io').listen(server);

server.listen(80);

app.get('/', function (req, res) {
 res.sendfile(__dirname + '/index.html');
});
 
io.sockets.on('connection', function (socket) {
 socket.emit('news', { hello: 'world' });
 socket.on('my other event', function (data) {
   console.log(data);
 });
});

CLIENT (INDEX.HTML)

<script src="/socket.io/socket.io.js"></script>
 <script>
  var socket = io.connect('http://localhost');
   
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
 </script>

Использование совместно с Express web framework

You can serve normal pages and AJAX requests with Express, and attach your socket.io server

For this example, simply run `npm install socket.io express`

SERVER (APP.JS)

var app = require('express').createServer()
 , io = require('socket.io').listen(app);
app.listen(80);
app.get('/', function (req, res) {
 res.sendfile(__dirname + '/index.html');
});
io.sockets.on('connection', function (socket) {
 socket.emit('news', { hello: 'world' });
 socket.on('my other event', function (data) {
   console.log(data);
 });
});

CLIENT (INDEX.HTML)

<script src="/socket.io/socket.io.js"></script>
 <script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
 </script>

Отправка и прием событий.

Socket.IO позволяет обрабатывать и отправлять произвольные события. Кроме `connect`, `message` and `disconnect`, можно создавать произвольные события:

SERVER

// note, io.listen(<port>) will create a http server for you
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
 io.sockets.emit('this', { will: 'be received by everyone'});
 socket.on('private message', function (from, msg) {
   console.log('I received a private message by ', from, ' saying ', msg);
 });
 socket.on('disconnect', function () {
   io.sockets.emit('user disconnected');
 });
});

Прикрепление данных, ассоциированных с клиентом

Иногда необходимо хранить данные, ассоциированные с клиентом, что необходимо для продолжении (duration) сессии.

SERVER

var io = require('socket.io').listen(80);
 io.sockets.on('connection', function (socket) {
  socket.on('set nickname', function (name) {
    socket.set('nickname', name, function () {
      socket.emit('ready');
    });
  });
  socket.on('msg', function () {
    socket.get('nickname', function (err, name) {
      console.log('Chat message by ', name);
    });
  });
 });

CLIENT

<script src="/socket.io/socket.io.js"></script>
 <script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
 </script>

Оборачивание себя (своего кода) в namespace.

Если вы контролируете все сообщения и события в коде, используйте namespace works по умолчанию (default namespace works) Если вы хотите использовать сторонний код или предоставлять код другим, socket.io предоставляет возможность использования именованных сокетов (namespacing a socket.)

Это полезно при мультиплексировании соединений. Вместо использования двух соединений WebSocket, будет использовано одно.

'SERVER

var io = require('socket.io').listen(80);

var chat = io
  .of('/chat')
  .on('connection', function (socket) {
    socket.emit('a message', {
        that: 'only'
      , '/chat': 'will get'
    });
    chat.emit('a message', {
        everyone: 'in'
      , '/chat': 'will get'
    });
  });

var news = io
  .of('/news')
  .on('connection', function (socket) {
    socket.emit('item', { news: 'item' });
  });

CLIENT

<script>
  var chat = io.connect('http://localhost/chat')
    , news = io.connect('http://localhost/news');
  
  chat.on('connect', function () {
    chat.emit('hi!');
  });
  
  news.on('news', function () {
    news.emit('woot');
  });
</script>

Отправка летучих (volatile) сообщений.

Иногда некоторые сообщения могут быть удалены (отброшены). Скажем, у вас есть приложение, которое показывает в реальном времени количество твитов по ключевому слову Бибер.

Если определенный клиент не готов к приему сообщений (из-за медлительности сети или других вопросов, или потому, что он связан через длинные голосования и находится в середине запрос-ответ цикла), если он не получит всех твитов, связанных с Бибер, то ваша заявка не будет страдать.

В этом случае, вы можете отправить эти сообщения, как летучие сообщений.

SERVER

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  var tweets = setInterval(function () {
    getBieberTweet(function (tweet) {
      socket.volatile.emit('bieber tweet', tweet);
    });
  }, 100);

  socket.on('disconnect', function () {
    clearInterval(tweets);
  });
});

Отправка и получение данных (подтверждения)

Иногда, вы можете получить обратный вызов, когда клиент подтвердил прием сообщения.

Чтобы сделать это, просто передать функцию в качестве последнего параметра `.send` или `.emit`. Более того, когда вы используете `.emit`, подтверждение было сделано вами, значит, вы также можете продолжить передавать данные.

SERVER

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.on('ferret', function (name, fn) {
    fn('woot');
  });
});

CLIENT

<script>
 var socket = io.connect(); // TIP: .connect with no args does auto-discovery
 socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
   socket.emit('ferret', 'tobi', function (data) {
     console.log(data); // data will be 'woot'
   });
 });
</script>

Broadcasting messages.

To broadcast, simply add a `broadcast` flag to `emit` and `send` method calls. Broadcasting means sending a message to everyone else except for the socket that starts it.

SERVER

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.broadcast.emit('user connected');
});

Using it just as a cross-browser WebSocket.

If you just want the WebSocket semantics, you can do that too. Simply leverage `send` and listen on the `message` event:

SERVER

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.on('message', function () { });
  socket.on('disconnect', function () { });
});

CLIENT

<script>
  var socket = io.connect('http://localhost/');
  socket.on('connect', function () {
    socket.send('hi');

    socket.on('message', function (msg) {
      // my msg
    });
  });
</script>

Примеры кода

process.nextTick(callback) - Гарантированно вызовет функцию callback в следующем цикле eventloop

http://kuroikaze85.wordpress.com/2010/06/15/socket-io-node-js-game-making/ Применение Node.js в качестве полной среды разработки для облачных решений


Официальная документция

АКСИОМЫ NODE.JS

Callback-driven парадигма

Неблокирующая функция принимает callback последним аргументом:

function asuncFunction(arg1,arg2,...,argN, callback){

}

Callback принимает ошибку первым аргументом, остальные результат:

function callback(error, result1,result2,...resultN){

}

Кластер

Кластер на основе NodeJS -

Примеры архитектуры

Tactoom.com изнутри — социальная блог-платформа на NodeJS/NoSQL

Обработка форм и визуализации через NodeJs

[1]http://nodejs.ru/665

[2]http://habrahabr.ru/post/138629/

[3]http://nodeguide.ru/doc/dailyjs-nodepad/node-tutorial-7/

[4]http://habrahabr.ru/post/147571/

[5]http://www.pvsm.ru/node-js/12212

[6]http://www.pixelcom.crimea.ua/rukovodstvo-po-html5-canvas.html

Установка node.js в Debian
  • Express: веб-фреймворк для Node.js. Руководство пользователя

[7]http://jsman.ru/express/

  • Руководство для начинающих

[8]http://vremenno.net/js/node-js-for-beginners/

  • Скелет приложения на Node.js с использованием express, mongoose, backbone.js, socket.io

[9]http://kulakowka.com/tag/express/

  • Русскоязычное сообщество Node.js

[10]http://forum.nodejs.ru/index.php?topic=130.0

Технологии спутники

Перечень модулей для Node.js https://github.com/joyent/node/wiki/modules

Node-sync

Node-sync_—_псевдо-синхронное_программирование_на_nodejs_с_использованием_fibers

socket.io

Express

Отладка и сборка

Примеры кода

Цепочка вызывающих себя через callback'и функций с передачей данных следующей функции (обработка ошибок в одном месте, массив функций в качестве параметра)

С использованием async это пишется так:

var async = require('async');

async.waterfall([
    function(callback){
        setTimeout(function() {
            console.log('f1 done');
            callback(null, 'data from f1');
        }, 100);
    },
    function(data, callback){
        // работа с data
        // или расширение цепочки через функцию f3, которая по окончании работы вызовет callback
        // f3(callback);
        console.log('f2 done');
        callback(null, 'done');
    }
], function (err, result) {
    // result now equals 'done'
    if (err) {
        // единое место для отлова ошибок
    }
    console.log(result);
});

Дополнительные возможности nodejs

Полезные ресурсы


'Отладка в Node.Js'



@модули для node.js

Запуск приложений node.js в Linux Debian/Ubuntu через /etc/init.d

Daemon init script for node.js based app/server (DEBIAN/UBUNTU)

10 типичных ошибок Node.js разработчиков

Официальная документация nodejs на русском

Различные источники

Использование MD5

Examples:

1)

var filename = process.argv[2];
var crypto = require('crypto');
var fs = require('fs');

var md5sum = crypto.createHash('md5');

var s = fs.ReadStream(filename);
s.on('data', function(d) {
  md5sum.update(d);
});

s.on('end', function() {
  var d = md5sum.digest('hex');
  console.log(d + '  ' + filename);
});

2)

var crypto = require('crypto');
var name = 'braitsch';
var hash = crypto.createHash('md5').update(name).digest('hex');
console.log(hash); // 9b74c9897bac770ffc029102a200c5de

3)

$ npm install sha1

and then

var sha1 = require('sha1');
var hash = sha1("my message");
console.log(hash); // 104ab42f1193c336aa2cf08a2c946d5c6fd0fcdb

or

$ npm install md5

and then

var md5 = require('md5');
var hash = md5("my message");
console.log(hash); // 8ba6c19dc1def5702ff5acbf2aeea5aa

4)

const crypto = require('crypto');

const sha256 = x => crypto.createHash('sha256').update(x, 'utf8').digest('hex');

sha256('Hello, world. ');

5)

function encrypt(text,password){
  var cipher = crypto.createCipher(algorithm,password)
  var crypted = cipher.update(text,'utf8','hex')
  crypted += cipher.final('hex');
  return crypted;
}

function decrypt(text,password){
  var decipher = crypto.createDecipher(algorithm,password)
  var dec = decipher.update(text,'hex','utf8')
  dec += decipher.final('utf8');
  return dec;
}

function hashText(text){
    var hash = crypto.createHash('md5').update(text).digest("hex");
    //console.log(hash); 
    return hash;
}

function encryptThenAuthenticate(plainText,pw)
{
    var encryptedText = encrypt(plainText,pw);
    var hash = hashText(encryptedText);
    return encryptedText+"$"+hash;
}
function VerifyThenDecrypt(encryptedAndAuthenticatedText,pw)
{
    var encryptedAndHashArray = encryptedAndAuthenticatedText.split("$");
    var encrypted = encryptedAndHashArray[0];
    var hash = encryptedAndHashArray[1];
    var hash2Compare = hashText(encrypted);
    if (hash === hash2Compare)
    {
        return decrypt(encrypted,pw); 
    }
}

It can be tested with:

var doom = encryptThenAuthenticate("The encrypted text",user.cryptoPassword);
console.log(VerifyThenDecrypt(doom,user.cryptoPassword));

получить MAC-адрес текущего компьютера с node.js

В NodeJS ≥ 0.11 адрес MAC для каждого сетевого интерфейса находится на выходе os.networkInterfaces(), например.

1. Пример:

require('os').networkInterfaces()

{ eth0: 
   [ { address: 'fe80::cae0:ebff:fe14:1dab',
       netmask: 'ffff:ffff:ffff:ffff::',
       family: 'IPv6',
       mac: 'c8:e0:eb:14:1d:ab',
       scopeid: 4,
       internal: false },
     { address: '192.168.178.22',
       netmask: '255.255.255.0',
       family: 'IPv4',
       mac: 'c8:e0:eb:14:1d:ab',
       internal: false } ] }

В NodeJS ≤ 0,10 вам нужно узнать собственные адреса mac, но есть пакеты, которые помогут вам в этом:
node-macaddress (отказ от ответственности: я я автор этого пакета).

2. Пример:

В режиме node ≥ 0.11 вам не требуется использовать асинхронную версию:

var addr = require('node-macaddress').one();

Поскольку вас обычно интересует только "macaddress хостов" (хотя нет такой вещи, как хост может иметь несколько сетевых интерфейсов,
каждый из которых имеет отдельный MAC-адрес), этот вызов даст вам именно это.

Проблемы и их решения

* Проблема:
DeprecationWarning: `node --debug` and `node --debug-brk` are invalid. Please use `node --inspect` or `node --inspect-brk` instead.

* Решение:

1. Переименовываем бинарный файл /usr/local/bin/node в node_bin

mv /usr/local/bin/node  /usr/local/bin/node_bin

2. Создаем скрипт в bash:

echo > /usr/local/bin/node
editor /usr/local/bin/node

3. Вставляем скрипт:

#!/bin/bash
## the script converting parameters for nodejs new version
##
new_name="node_bin";
eval _options="(" $(echo -e $@) ")"
_node=$(whereis -b $new_name|awk '/^'$new_name':/{print $2}');                                                                              
eval _version="(" $(echo -e $($_node --version|sed 's/[^0-9]/ /g')) ")";                                                                    
# local values                                                                                                                              
old_options=( "--debug" "--debug-brk" );                                                                                                    
new_options=( "--inspect" "--inspect-brk" );                                                                                                
_opt=();                                                                                                                                    
                                                                                                                                            
function filtr() {                                                                                                                          
    _opt=${_options[@]};                                                                                                                    
    for ((get_i=0; get_i != ${#old_options[@]}; get_i++))                                                                                   
        do                                                                                                                                  
        if [ ${new_options[$get_i]} = "" ];
            then
                _opt=${_opt[@]};
            else
                _opt=$( echo -e ${_opt[@]}|sed 's/'${old_options[$get_i]}'/'${new_options[$get_i]}'/g');
        fi
    done

}

function convert() {

if [ $(echo -e ${#_options[@]}) = 0 ];
    then 
        $_node;
    else
     filtr;
    
        $_node $(echo -e ${_opt[@]})
fi
exit 0;
}

if (( ${_version[0]} >= 7 ));
 then
   convert;
fi
exit 0;
  • Обратите внимание на выделенное имя - node_bin, в скрипте будет поиск именно такого имени бинарного файла nodejs,

если у вас иное укажите в параметре скрипта.

4. Даем права на запуск скрипта:

chmod ugo+x /usr/local/bin/node

Все. Теперь если версия nodejs больше или равна 7.х.х - то автоматически параметры
--debug и --debug-brk будут на лету меняться на --inspect и --inspect-brk.

Данное решение на какое то время решит вашу проблему, но обновление среды IDE скорее всего неизбежно.
Я столкнулся с этим в netbeans.

Источники: