安装过程就不说了。如果成功是能使用node的命令。node.js调试是非常方便的。每种后台语言都有一个向那个黑黢黢的控制台团输出语用的命令。node.js沿用FF那套东西,也就是console对象与其方法。我们首先建一个example.js文件,内容如下,然后在控制台打开它。 代码如下: console.log("hello node.js") for(var i in console){ console.log(i+" "+console[i]) } node example.js。
你千万不要在node.js使用alert进行调试,那是浏览器带的全局方法,不报错才怪。 输出结果如下: 代码如下: var log = function () { process.stdout.write(format.apply(this, arguments) + '\n'); } var info = function () { process.stdout.write(format.apply(this, arguments) + '\n'); } var warn = function () { writeError(format.apply(this, arguments) + '\n'); } var error = function () { writeError(format.apply(this, arguments) + '\n'); } var dir = function (object) { var util = require('util'); process.stdout.write(util.inspect(object) + '\n'); } var time = function (label) { times[label] = Date.now(); } var timeEnd = function (label) { var duration = Date.now() - times[label]; exports.log('undefined: NaNms', label, duration); } var trace = function (label) { // TODO probably can to do this better with V8's debug object once that is // exposed. var err = new Error; err.name = 'Trace'; err.message = label || ''; Error.captureStackTrace(err, arguments.callee); console.error(err.stack); } var assert = function (expression) { if (!expression) { var arr = Array.prototype.slice.call(arguments, 1); require('assert').ok(false, format.apply(this, arr)); } }
结果如下: 代码如下: var global = [object global] var process = [object EventEmitter] var GLOBAL = [object global] var root = [object global] var Buffer = function Buffer(subject, encoding, offset) { //太长了,省略 } var setTimeout = function () { var t = NativeModule.require('timers'); return t.setTimeout.apply(this, arguments); } var setInterval = function () { var t = NativeModule.require('timers'); return t.setInterval.apply(this, arguments); } var clearTimeout = function () { var t = NativeModule.require('timers'); return t.clearTimeout.apply(this, arguments); } var clearInterval = function () { var t = NativeModule.require('timers'); return t.clearInterval.apply(this, arguments); } var console = [object Object]
发现global与浏览器的window一样,都有个指向自身的同名成员。window === window.window, global === global.global。但node.js早期设计得不好,又一搞了个多余的GLOBAL成员。 console.log(global === global.global)//true console.log(global === global.GLOBAL)//true 我们再遍历module对象: 代码如下: for(var i in module){ console.log("var " + i + " = "+module[i]) }
结果如下: 代码如下: var id = . var exports = [object Object] var parent = null var filename = /home/cheng19840218/node/example.js var loaded = false var exited = false var children = var paths = /home/cheng19840218/node/node_modules,/home/cheng19840218/node_modules,/home/node_modules,/node_modules var load = function (filename) { //太长了,省略 } var _compile = function (content, filename) { //太长了,省略 }