コマンドプロンプトのコマンドを実行することも可能です。
以下、dirコマンドを標準出力する例です。ファイル削除することだったりも出来ます。
dirを、例えば、del c:¥a.txtというようにするとファイル削除されます。
以下のようにrequestHandler.jsを書き換えます。startメソッドで、content変数にdirの結果を返しています。
var exec = require('child_process').exec;
function start() {
var content = "empty";
exec('dir', function (error, stdout, stderr) {
content = stdout;
});
return content;
}
function end() {
console.log('Request handler end was called.');
}
exports.start = start;
exports.end = end;
server.js→router.js→requestHandler.jsという流れなので、戻り値を表示するように変更します。
以下、server.jsです。
var http = require('http');
var url = require('url');
var router = require('./router');
var requestHandler = require('./requestHandler');
var handle = new Object();
handle["/"] = requestHandler.start;
handle["/start"] = requestHandler.start;
handle["/end"] = requestHandler.end;
var server = http.createServer(function(req, res){
var pathname = url.parse(req.url).pathname;
var content = router.route(pathname,handle);
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(content + '<br />');
res.end();
});
server.listen(8084,'127.0.0.1');
console.log('server start');
以下、router.jsです。
function route(pathname,handle) {
if (typeof handle[pathname] === 'function') {
return handle[pathname]();
} else {
console.log("No request handler found for " + pathname);
console.log(typeof handle[pathname]);
}
}
exports.route = route;
この状態で再起動してから、
http://localhost:8084/startにアクセスしてください。
ブラウザ画面
dirコマンドの結果が表示されずに初期値が表示されます。これはノンブロッキングで動作するためにコールバック関数を使用しているからです。
コールバック関数の処理結果を待たずに、startメソッドはreturnしています。ブラウザに表示するには
node.jsをノンブロッキングにしてブラウザに表示を参照ください。