Node.JS編程入門55:REPL競有這麼強大!

在Node中,有一個神器:REPL,全稱是:Read Eval Print Loop。即:交互式解釋器。

從名稱上,看不出它能幹什麼。那麼,我們直接從一個示例來看吧:

Node.JS編程入門55:REPL競有這麼強大!

本文共需兩個程序:

首先是test55.js,它用以前文章中的一個例程代碼,再加一個REPL服務器功能:

var http = require("http");

var test="this is a test";

var server = http.createServer(function(req,res){

res.writeHead(200,{"Content-Type":"text/plain"});

res.write("Hello JShaman.com");

res.end();

})

server.listen(8000,function(){

console.log("listening on port 8000");

});

//repl部分:

var net = require("net");

var repl = require("repl");

net.createServer(function(socket){

var r = repl.start({

input:socket,

output:socket,

terminal:true,

useGlobal:true

});

r.on("exit",function(){

socket.end();

})

r.context.server = server;

r.context.test = test;

}).listen(1337);

console.log("repl listening on 1337");

前半部分,是一個簡單的http服務器功能,後面部分是repl服務器部分。

接下來,還需要一個repl服務器:

repl_client.js:

var net = require("net");

var socket = net.connect(1337);

process.stdin.setRawMode(true);

process.stdin.pipe(socket);

socket.pipe(process.stdout);

socket.once("close",function(){

process.stdin.destroy();

})

有了這兩部分程序,就可以演示repl的強大了:

啟動test55.js,再啟動repl_client.js。

在repl_client命令行中操作:

1、通過REPL查看進程信息,如:運行了多少、使用了多少內存:

Node.JS編程入門55:REPL競有這麼強大!

注:運行時間單位是秒,內存用量單位是byte。

有點意思了。

2、通過REPL查看程序中的變量:

Node.JS編程入門55:REPL競有這麼強大!


Node.JS編程入門55:REPL競有這麼強大!

這是怎麼實現的呢?test55.js程序中的變量,被REPL客戶端獲取了。

當然,我們也可以通過類似的方法獲取其它變量,用於調試的話,這會非常強大。

但這還不是最強大的。

2、通過REPL控制程序行為:

輸入:

console.log(test);

看看發生什麼?

Node.JS編程入門55:REPL競有這麼強大!

主程序中輸出了!

更進一步:修改主程序中的變量:

Node.JS編程入門55:REPL競有這麼強大!

還有更過份的:修改主程序,給主程序添加函數:

Node.JS編程入門55:REPL競有這麼強大!

然後,在瀏覽器中訪問主程序端口:

Node.JS編程入門55:REPL競有這麼強大!

執行了console方法,並且有我們上面設定的標識:“MYGOD!“。



分享到:


相關文章: