目录:

  • 编写第一个Node.js程序;
  • 异步式I/O和事件循环;
  • 模块和包;
  • 调试。

1. 编写第一个Node.js程序;

  Node.js 具有深厚的开源血统,它诞生于托管了许多优秀开源项目的网站—— github。和大多数开源软件一样,它由一个黑客发起,然后吸引了一小拨爱好者参与贡献代码。一开始它默默无闻,靠口口相传扩散,直到某一天被一个黑客媒体曝光,进入业界视野,随后便有一些有远见的公司提供商业支持,使其逐步发展壮大。

  用 Node.js 编程是一件令人愉快的事情,因为你将开始用黑客的思维和风格编写代码。你会发现像这样的语言是很容易入门的,可以快速了解到它的细节,然后掌握它。

1.1helloworld

好了,让我们开始实现第一个 Node.js 程序吧。打开你常用的文本编辑器,在其中输入:

console.log('Hello World');

将文件保存为 helloworld.js,打开终端,进入 helloworld.js 所在的目录,执行以下命令:

node helloworld.js

如果一切正常,你将会在终端中看到输出 Hello World。

aaarticlea/png;base64,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" alt="" />

console 是 Node.js 提供的控制台对象,其中包含了向标准输出写入的操作,如 console.log、console.error 等。console.log 是我们最常用的输出指令,它和 C 语言中的 printf 的功能类似,也可以接受任意多个参数,支持 %d、%s 变量引用,

//consolelog.js
console.log('%s: %d', 'Hello', 25);

1.2 nodejs 的命令行工具

前面的 Hello World 示例中,我们用到了命令行中的 node 命令,输入 node --help可以看到详细的帮助信息:

aaarticlea/png;base64,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" alt="" />

其中显示了 node 的用法,运行 Node.js 程序的基本方法就是执行 node script.js,其中 script.js是脚本的文件名。

除了直接运行脚本文件外,node --help 显示的使用方法中说明了另一种输出 HelloWorld 的方式:

$ node -e "console.log('Hello World');"
Hello World

我们可以把要执行的语句作为 node -e 的参数直接执行。

使用 node 的 REPL 模式:

  REPL (Read-eval-print loop),即输入—求值—输出循环。如果你用过 Python,就会知道在终端下运行无参数的 python 命令或者使用 Python IDLE 打开的 shell,可以进入一个即时求值的运行环境。Node.js 也有这样的功能,运行无参数的 node 将会启动一个 JavaScript的交互式 shell:

  aaarticlea/png;base64,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" alt="" />

1.3 建立http服务器

  Node.js 是为网络而诞生的平台,但又与 ASP、PHP 有很大的不同,究竟不同在哪里呢?如果你有 PHP 开发经验,会知道在成功运行 PHP 之前先要配置一个功能强大而复杂的 HTTP服务器,譬如 Apache、IIS 或 Nginx,还需要将 PHP 配置为 HTTP 服务器的模块,或者使用FastCGI 协议调用 PHP 解释器。这种架构是“浏览器  HTTP 服务器  PHP 解释器”的组织方式,而Node.js采用了一种不同的组织方式,

我们看到,Node.js 将“HTTP服务器”这一层抽离,直接面向浏览器用户。这种架构从某种意义上来说是颠覆性的。

好了,回归正题,让我们创建一个 HTTP 服务器吧。建立一个名为 app.js 的文件,内容为:

//app.js
var http = require('http');
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<h1>Node.js</h1>');
res.end('<p>Hello World</p>');
}).listen(3000);
console.log("HTTP server is listening at port 3000.");

接下来运行 node app.js命令,打开浏览器访问 http://localhost:3000,即可看到下图所示的内容。

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWgAAAD6CAIAAAADXkp+AAAfqUlEQVR4nO2deVRUV57H33/84R+e/MFfnpyenrYPx6T7eM60M2MnnelOusceeqnuDG0cuyWTjkvUBFtNSLcGxY5bKhOJwTUGRBpBRNACtBBl0QACimwWoECx7wVFFbVQKzV/vHqv3l51WQTx+znfc4K33nLX7/vde19VqBGLG4IgiEjU8IQbgiCISNTwhAuCIIhI1JDZFaIGxp1tfcZqXded2tbbVU3asgZtWcOtSt2d2tZqXdeT3rGBcWfoV4Mg6NlVSFOV/rHJBy29BeWNjW29Q0aL1e6edHmcbq/T7Z10eax297DR0tjWW1DeWN3c0z82Oe9xFARBcypqyOxW0KDJVfukv+h+c/fQuNM95fJMOd1Tk66pSdeU3eW1u7z03/RHDre3z2Auvt9S+6R/0ORSvjIEQc+uqEGzS05tg6aKho6WrmG70+NwT9lcXqtTSTaX1+GemnR5W7qGKxo62gZNCheHIOjZFTVockmqY2jidlVTn8E86fTanV5byLI7vZMub79h4kxGQc7t+/l36yAIWmSiBs1usdoGzaUPW4fHLA73lE0xypAOPZzeSbfXarfXN7eNmyc8AIDFhYRx9BjsFQ2d/QbzpHvK4vROT1an1+2dMpktT/Q9TqfLBwBYRFADJpdANY/7W7qGJ11eq8Nrmb48NofH453qGxzp6R+e72ICAGYTqt/k4qp10HyvsWPcMjnh8JqDKTXzakZ2nuRHEw7PhMNjc3onHc4WfY/FZp/vkgIAZg1qwOTmqrqpt3PAaHN6JxxBdFB9fOW//+yH//azU0lpEgdM+uX2ThnGTB09A5K3t9vtTU1NJSUl+fn5+fn5JSUlTU1NdjtcBoAFDdVvcrPqNkwWVjZbHB7uyJfUIfXx1a//+jdv/flXf3h71U/+02z3CA4wM7I6vB6P5+GjJy6XW3Dvvr6+69ev37t3r7a2trm5uba2Vq/X5+bm5ufn9/b2zkt1AABCgeobd7F61GlobOu3Or3mSY+CDn5+/Mdv/ObNDVvWb9752/UbL2TkSBxmD8jtneruGxo1mrg37u3tLSgoGBkZsVgsdXV1+fn5eXl5FRUV165dy8/P12g0Ut6RtZZ6KV430zLr4l+i1mbN3vUAeO7gGUdFY5e+3zjh8I7bPXL69POvXvn5b9+M3vrHLbvf3PBe6mWNaVLiMBNHDrd3ZHS8vbufvavNZsvNzR0bG/N4PG63e2JioqysLIehoKCgoaFBo9HYbDZ+bp8R42jKOkCT1SSReKp0ZBqJACwkqL5xN6uSmrahMat50muyS+vg54mv/kIV9fb2t7d//MfNuzJyrisczMrq9E5YbLonHexdGxoaSktLXS6Xy+UaGxvLycm5wqexsTEnJ6ehoYGf2wVmHJKnj5Se8vtFUxZrHSOlpxgbCKSGngjAAoMXcdyqah4x200yscbBzxN/suZ3a995/50P/vbujr0b3vvwv6Ki/+2n//XDf/2PH6x67QerXnvpX1797/XviE+ccHgnJx11Ta3sXbVa7cOHD3t7exsaGnJzcy+LKCws7Ozs1Gq1/Nw+C8bBoSnL7wEjpacCFsD8I/REABYaVO+4i9X1ikcmu9to94j1derlV/9TtW7jjnf/8smmXfs27dr37o69f9r64do/f/CH/91O683orT/++W/8p9gCGrd7PF7v/YYW9q6ZmZk3btzQaDSXpMjLy9Pr9aOjo5mZmfzcckeqLv4lioG2AWGyPzVrrSBBYBxZzBkcEwicw0nlXYh7+5fidZxAgYX1DV9TFtcA/OmhJwKw0KB6jC5W18sfGa0uo80zJtJXX1/4zbp3N/4lbsuHB+S0adf+Nb//k/8Ua0DjNo9bZBzpHC5fvpyenq7RaHJzc9PT03U6ndVqHRwcvHTpEj+3rHHo4l/iW0ggmesiPp8vay3zb97JrHGwzpC1luKkshdh/yERXnCSuMYxUnqKv0QhiBxoOwg9MZR2BOCpQvUaXawKq5qHxyeNNo/RKtSYxXXwi1Nvb/9460d/3/bxwW0fH9zy4YF3Ptjzpy0frt+8i9Zb78Zs2fE3//Ecmeweq22SO1XJy8tLS0tLS0srLy9/9OhRZ2fnzZs3q6qqsrOz09LSWlpa+vr66urq8vLy+LllRmpg6PPShcl+hEGIzFSF+YfAIdij6YBD4rZyBMwEEQdYZPAijqIHrd1D5jGbZ9QqJYvryJdn34n52/a/Hnp/z5GNu/bfKK4QzGjGpc6dcHiMJjN3cbSmpiY1NfX27dtGo9FkMplMpoGBgcLCwtTU1NTU1LS0NPrvBw8e8HNLbBy6+JfYkIL9dJrGEbggJ0hRXiJhBj7PAJioIvREABYaPOMoa+yqb+012j0Gq4wsrqPHv373L598sPfo5g/jf7vu3cuaQskjR61uVpMur76nr72rj72r1WpNS0tLSUlpbGw0MtTV1V2+fDklJeXixYtZWVlpaWlWq5Wf21CmKkyyLj4+izvryFobYsQhN1WJZy8scTobXQQ2VbjTF44FBKwh9EQAFhhU95iLVb3eUFihG7d7RizymnAd/ercpl373t97JHp77E9/9Yf0qwXiwwwWNyuXZ6q6vtkwxnsBTK/XJycnZ2Zmjo6Ojo2NjY2NjYyMpKena7Xamzdvpqam6vV6UW65A11y/ZKTzFn1oGcp8SFGHD6ZhVfOpbL4N+MvjjJLHPz3OAKp00oEYEHBM472QVv6jXsjJodBwTgsnpEJ12eJSe99dGDHPvWG7R+/9svfSx3jpjVm9zid7sJv74u/XN/e3p6SknLt2rWqqqqKioqcnJxr165pNJqUlJT29vZ5qQ4AQChQXWMurr5t7C6taRm1eYYmlDQ84VKfSNq8O/6dmL3Hz12UOsD/o6YOt7e+qY372igXi8VSXV195cqV5OTk5OTkK1euVFdXWyyWp1wLAAAihMbR1Gu6XFjd3m8csXiC/NKx2XX+Um5qVr5B/sgxu2fUaCqpfDhhtQXPCwDgGUFoHF1jrtLajtw7dWM2z7DFMzThVtCwRemYUZvH5Zm6W93wRN8z38UEAMwmVOeYS6DWQVtOSV1pzeNRm2dgwj09DZrddpe3oaW9/EEjfjoQgEUG1TnqEkvXY0q6erf2cZ/B4hmS+jVjZQ2Z3QaLp2dgOK+oApMUABYfVMeoS1JNfROnM28VP2gZNDsHzG7u7/0oa8DsHp5wl9Y8+eDA6aSrd/9xvRKCoEUmWePoGHXVdY6l5FVcKqzsNViHLZ5+s7vPpKR+s3vY4uk1WDNu3kvJLX/UZew2uiEIWnyiOkadCtIbHPllukPnsvPLG/rG7Aare2jCPWB2DzA/bjxgcg2a3UMTboPVPTA+WVD56PDX2fllOr3BoXxlCIKeXVF6gzOomvstlwof7Eu8dC6rqKi6uanT0DFkGTQ5B03OjiFLU6eh5MHjc1lF+xIvpWmrmvstoVwTgqBnVyEZB622Ycfd+q4L+RUJ/7h+6OucuOPpccfTD57NTvjH9Qt55Xfqu9qGHfNeHgiCnoKodoMTgiCISDAOCIKIRbWPOCEIgohEtY04IQiCiATjgCCIWDAOCIKIBeOAIIhYMA4IgogF44AgiFg84/jstj4m+5GCPrutn/ccQ3KiCJn3DEPPrni9Z3tmXVWXndW9TntFl/3bduvdduu3euudNsv2zLp5z/FMdLe27ejxb3bu+VRvcO7c8+nOPZ8W328uvt9M/00nHj3+zd3atnnP6nTakqIIfk8BxjEbWtw9SqGAvN6zLaOmqste2mYtabOWtFmLnlhuPbHcfDxxo9mcpzPdaDFvy6iZ95LMRJ8cOlZe39Y37tIbnPT/Z5v+4SL6bzqxvL7tk0PH5j2r0xCM4+lrlntUWdzyiDjtfBcqlALyes97adVVXXa/a7Rabz2xFLRMXG8y5+lM1xrH85pM76VVK5VZlSFMoaIS+YdpY1csj62j/xDFzitiyujDMiKlg2v2AMFdqMikkGph555PO0ddyt/e6Rx17dzzqexFkqIoiabNiJTPQ6CkgvrxnyisImEN0LcLoUtJGofH4/lkz8elpaVTU1Ner7e5uXn/vrjJycmgxqGNXSFfq3T2uDnPiBRkLykqUF7pSmM+oiiKV3t1MRH8OglcSqq6BB2PZOwlqihOxvgXF/fn2e5RiapAEyeKhgM9TETZqIuJEI8CufFCwxRKXDNJUf67kBeQ13u2XCiv6rIXt1qLWq3aJtOOk5ofbzqwetOB7SeuXa41XG0c33KhXLmrCfKhjV0hHi2SifwaEfVCf0ULq0zKfSTHp1+0cQZV37hLsnTC9mA6PWcISTShYtvIG4e/Bug/6mIipLoCX6xxeDwes9lss9l8Pp/T6bxwIjbxyPYLZw6e+TLu/Fe7zn6xw2azTc84mEoQt5SwyRJVKyJVUq0jGCecs5g7ssbB/MEaB9eMWIlGeKJKUOeC2gvALaCo99bFRCi33Ux7lMR92bHNGdJMtTBdJVBe2crnlyLQW4Q1E4JxyBWQ13s2Jt+t6rLffmIpfGyJOXH1jdjThzW1B6/V/uzD05u+zL5SP7Y5payxzyp/m7oYVZy2LG65ZCupMhRdnG8c0g3NNY6MSPGYTIqSG1S06KlaUMlEHIE28De2ZD+W6xPSCsk4EmNXBMouf1PaOEwmU01NTX19/fr16y9evOjz+bQZRyw1m3QFO4bvvT9SvqUka4+McYT24OI/9LSxK6iIOK2g74b62OedFcw4RONfFcdJiYpUUWIE3scPMaQaIvAw4CHXjjPrUWwsJlPzwoeHv9r9T1Ceg0RFqkSRaVIUpYqj6zCRXzn+auEWVqa95ArI6z3vflNS1WUvfGzRNpsjPzn3WX594WPz9abxv1+t/cXfvv60qPvt0wVbU77NqekJ1iFkzIwpquDpvTy2jiziKItbTg+kwF3qYiKUYo3ZaWa6VdgGm1PjCLRoVGREVCKbIj8gKYry+Xz19fVGo9Hn89lsNr1eX1JU+NWRGEPlB8WZO4su7dIX7chOVU9NTVGSxiExjJ1M9Yr7X8BGI5O457LPaslHvewER9k4ZALVQKdKVAltgleEpChKFGLwi8CZXEvNsuegR4laXyrikC4Or3dlREbEaZOilsfWaWNXRMZyK0Q07+MqtKlKcON45+ytig7bjWbz1UemP6izd5wr/Lpy+ETZwObT2t8dydqZ3/726YJbj00bzxWJb+DvUpxprbJxcFuUYxyyUaWcNYqCZyXNILCUyFikKkqUMcWHtsziiNQxga4QqDqJgSdhHA0NDV6vd2pqqrhQu/+jLSkHf5d8+K3Kax+WZu7Mv7Cj9+6O81+fmLZxMHlmH30Ur+9yWkSxR0pUpr/TyxlHxAp6RDEBjkSn4uaNawptwae0gVbw2wd7i2Ch04ymKuwDX3aNw19R/srkPagkHrSJKn/30MauWB4bx8QpjBWKF8tma6ry9umCu+2WlOqRpKrhjadu/Pj9z9cdvrj2UNq/bld/lPYtbRzpD0ffPl0gfRtuEyaJB1UoxiHosgqTN3Ys+WsqFO/IK7kfSjPnldyXvwgnS0xDihdf2P463YiDWzMZkZRgDU86tqKNo6Ojo7W19Vxi/PWEyAdnVj04s+rW8devfBU9WLlr4sHmS0mf9vT0zMg4mJali8Z4R+DcRFVUYqBNxeOVP56J1jg47S6yVHpJhR/OSK1YJ6ro2qvTitbLArUtazFz3KMkfYoXVnOCbm6XYOIUpj65QR+vMqWG3nSGDK/3RJ/IL3xi/qZy+E9H01/dkfDW/2X/ZMexn8Qc++B8SVL1IG0cJ8sHo0/ky45kpor5Y4YpWMjGwXGcqEjRuqD/APaaooaW2w6YSWApvTg6V8bhjzj8xZR0YRnjsFqtf43ZUHlmdW7Cr8pO/7T+3Et1p1+sOvXvhUnRF07tGR0dld+ODWWNoy4mYsVyf2wov6sSQo9sS4qiVFGRHA8SGUdQMcbEzhzlTYotHds3eOsdAm/y/9PfOgrtOMMe5Q9wVBmJ4gUaybiAs9zD6eR05WdEUlExgZVUijnSXwncmYuoM8s+dEOaqvzxuCZXN77uYOqP/hz/3hntP2qGL9YOp9YMnyzvT/i2nzWOPx7XKBlHUtTy2Dr+hFPCOLi5DhJxsH4kXFuluwKvzMzzZPaNg5n3ZkT6Fx0C/YkxDuJ5VlDjkIpRZaMwiqKmpqbOnTiS/NX+/Xs/Wv7P/5R7Je1qWmJG4o7iE7+oOfODdPX/VN4rVzKOYBGHNnbF8tgMwY4gr9Pzp+gS4yGwBklXpj/GlpqqyC5Vcse/5K6KxJqoLCtiyng7o5z8K8aDs9KjIuISufUcJOLglEUwECLiYjihX4yKikyiuyV/RV8VJfHkln/yhWoc67/ISS7reO39o9vOapOrBo8W9xwq7vn77e79t7rUpb2scaz/IkfWOCh2qi+1JS4ZcQS6Js84OI0dFUPP2TjXZKdz7EIpfbzyCx0zW+Ogs8e4e0RcjIq/yi263cwjDlLjyM9JP3lom8/nm5qaSkhISEhIMJlMTqfzUWP9pZTjmuPrrh5TPawu93g8UsYhzLxUnB+VyFQF6/7+R5xUxCGqGX95mXTlxVFRNMqMK61gsAUzDvFw5VQgZ87CrIkyVxDvgM5ij+J2Y+lYj9374Jg1f9UjUKtUILxiu01Z3HLmIcfWMDugQjSOkNY4/ufzrMza0aR73UnVg0eKew7e7j5wu3vfra69NzsPF/fQxvFVaW/0l1fluho7sxVsF1PSIYPEyJTujgFLkuoHgkeQvGa6qzLCz1JgVj8nxhGjYh7RIU9VTh47oM29wr79ZTAYnE4n+8/+/v5r6WeTjm46cezv0zMObktJVwu/78pGHJJnBa4/68ZRFxMheJWOv3LE6WCc7RvOHq1Mv51hj/LXj+IaR+CJyFncCTw4ZauRV5mCOGWWpyrrPstMfTBypnLweNlAwrf9X9zp+/xO39GSnkNF3QeLumnjeOfLq5qabqU+x3vPj++dksbBWVuW2HSg1zi49kG/DxJsFElq35GEkvstym1ccr9l35EEmTYI1D63d0o9V/kFF/cVBZgZL28rMbSIYxZfOZ8l45COOGTKwt1yDmneR3ur/50amcoMLJyzx7CV6R+KbDArfOaxjSX3WJpJj2L3pKQ3fbj55BqfoLrotRipCQ5bS+LeEvpURa6AvN7z8YWitz67pKDd52839E6EOEoXoO4+fPzJoWPKX0n65NCxuw8fz3tWp6HZNQ4oFC3uHqVQQF7vefBkoPh+y+2qJjmV1XfUtA496jHNe3mmJ73B2W109RhdbSPOHqOrx+ifv/VwEruNLr1h/rM6DQV7QAuZ9wwvAi3uHqVQQPQeCIKIBeOAIIhYMA4IgogF44AgiFgwDgiCiEVlFdVBEAQRiWDnHwAAaGAcAABiYBwAAGJgHAAAYmAcAABiYBwAAGJgHAAAYmAcAABiYBwAAGJgHAAAYmAcAABiYBwAAGJgHAAAYmAcAABiYBwAAGIWtnE4jO33zu9XrQ7fqpnvrAAAAsgZh069kvtL+i9su+Xgfa6JFv7Y/kq1bhbzJbh+9AIxjiHN1u8uoSiKWvLd3yfPZnkBeKZQjDgcved+yQzdV0/qRZ9b7+x6kaKoX54fmpvMDaWpwhaWcXD9bHadEoBniSBTFc5AEQUdPiYumbtRzcY9C8U4jMV//eESiqLCln5/q2aO7BKAhU/oxiH1iH3ujAMA4POFZhwvvPCCP+iI1hh5H8M4AHguCcU4Vh4+GxMuGXTAOAB4LgnJONQ6/dnXwySCjufNOBzGvpZ753e/tiwMS6PguSZE4/A5Kvd+Txx0yBuHtSVfvWH1sqX+XZEl4d9Zrdp//n6vaH2VxdF75+SG1eFL6BPCli57+Y3dhze/rGQc1pbLu994mTnFf497ndbQik6AYHNaaU/F0Xv/PCdTVNjSZas3qFNO7X7j+0s3Lgz7A2DGhGocnL3RsDcvMUGHtHE4WtPWLQujKCosIkbb66Bf49oYEUZRVNiyX59tkDCPoVsx9Oer9t5hztj6wyXsMBUbh/Wh+pUlFEUteSX+Tq/D57N2Fql/vSyMoigqfI3kPWYFthYkjcPRoF4VRlFU+Bp1UafV5/NZR2rz4/3ZoqhVCY/nKFsAPF1CNw6frybeH3R8L76G/ljKOIw3NtILIt/bdou7YckMKio8WrCRyX4SpkrjndF7Xu49Dl0CfcbKwzyLYId1+MYb/GXcWYMJPqSMQ3/yVYqiqBdjy/i+ZX14eFUYRVEv7q2cm0wB8JQhMQ6fURP9Ai/oEBuHo9i/jvq9vZXCpz473QmPKeZ8xq6fsH7EIrPGYbz0ZhhFSb5aUrn3RfqM18/2BCn69FAyDv/mtcRHdNGXbC2ckzwB8LQhMg7OSKYHucg4mCEtswTAnq5KYwOCnrOv02kvH26QPZ5nHP4HOxW28YZMjgW3mE2UjKM4hvZVQRwEwKKD0Dh8jlvb/EGHKm1IZByO7HWU/Jj2BYYWtS6bGVrsSJdYAJU0DvYmkubEXk7Ch2YDJePw6ZPXMCu1331jizr/kREGAhYlpMbBnVnsrWwQGAc70OX2HMQHsClSA13SOCS2OCSZmy1cRePw7w39iNlMoqiwpd9/Y/ec7PQAMI+QG0dgGSNMtTd29oxD6hRl45iXVymCGIcfa+e98/tVXANZ9mt1Gb7cAhYL0zAO7s5sWBglOVWR2z9QmKq8EFMsOlzSOIxpKuWbzCmhGQeDtfNeFrsdG7ZKjbUPsDiYlnFwXgcTjGp2pVN6U0Pq44bD/pe8JFYz2c940w7WTuZq50QJeeN4fOKVMCosWiP2Bna/ea5WbAF4ykzPODjbJ8JwgNmxlfr9DnY7JPAKmS/weoh4zAVWM/jrFWy61E18juKY8CXhqm84HzkaztKP/SXhq3ffmtGMQcE4ElaJysZmwB+K4RUwsDiYrnHIj+ohTXS4VGDu6L287gWKkngBbCib/kBwBpMskQN2mSU8OlvwFjt9e8ELYDc2si4nv+MTGgpTFf+kS1Q+H2uO4jdVAHgmCeUXwGSm82xwIXrlvOHsmnCKoqjwNWr6dfCR2vz4NeGU7CvnQ2V7mbdKL3dafT5r571T65aF+ddQpCIbR2/2RuYFc+7r3WvCKWrJKwmCezxV46AoKnxNPLMVax1p8b8LH7ZsI377BywSQvzNUSl/YKcewb/kFrZ0WbAvufG/47Yk/DurN5y8c+fwyrClP9og80KE8Ptk8t+kY6cqYUu///uZfZFFwTh06lfCv7N6g1q9XxX4eh9FLQn/zstvbFHnt2BLFiwaFvavnC9AmH0hLHOC5xkYBxnMvpDksiwAzwswDhl0J16h/z8Ia5IDFuFoOLySoubyy7cAPBPAOGRgf0PA/z1fduk1bNm6tFa8xwWeb2Accjh6tfv5v+QV9EfMAHhegHEAAIiBcQAAiIFxAACIgXEAAIiBcQAAiIFxAACIgXEAAIiBcQAAiIFxAACIgXEAAIiBcQAAiIFxAACIgXEAAIiBcQAAiIFxAACIgXEAAIiBcQAAiIFxAACIgXEAAIiBcQAAiIFxAACIgXEAAIiBcQAAiIFxAACIgXEAAIiBcQAAiIFxAACIgXEAAIhRNg6NRvOU8rHw0KnVz2/hAVBG1jh06pUURUWTjB36FIqiVqp1oaTPF0Hz4z+AqPAAPE8oRRya6OmMHZ16peSAlEufL4LkZ3qFB+D5AMYhA4wDAHlgHDLAOACQJ6hxSC8IsKnilQAi49BEM5cJYir+A6M19B8r1RreOoT4OmwOozXsx8IiKOQnOhrGAYAsQYyDHWw69Up2IPGHnCaaP/5CNw5NNMW9ZpCBqlOvpA9gb6hR+/8rfx1NNGsBwjso54f7NwBAQMhTlcA/ONGGVNARqnEE+7fUBRgDWKnWsb6heB2F8S+6H39ygqkKAPJMwziCDKlQjUMTLZ79KA9VOtTQqKOjV0ZruPGG/HUU8grjAGDaTC/iUAoN5izioJ1DrVbrdOqV0Wrm/axgEQeMA4BZZxrGEZgs+P/Ff8OSaI2DTQkeb/jPYBc7eVmTuw6JcXCvo1OvxBoHALIEeXOUvysRGJ+BXQyehfAWP3iDWSqdd52QRql4gVT2OoKbCpZFZfLD2UJSR1ML5lVXABYa+JIbAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAGBgHAIAYGAcAgBgYBwCAmP8HOFmH0HbTqksAAAAASUVORK5CYII=" alt="" />

用 Node.js 实现的最简单的 HTTP 服务器就这样诞生了。这个程序调用了 Node.js 提供的http 模块,对所有 HTTP 请求答复同样的内容并监听 3000 端口。在终端中运行这个脚本时,我们会发现它并不像 Hello World 一样结束后立即退出,而是一直等待,直到按下 Ctrl +C 才会结束。这是因为 listen 函数中创建了事件监听器,使得 Node.js 进程不会退出事件循环。我们会在后面的章节中详细介绍这其中的奥秘。

小技巧——使用 supervisor

  如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你在开发 Node.js 实现的 HTTP 应用时会发现,无论你修改了代码的哪一部份,都必须终止Node.js 再重新运行才会奏效。这是因为 Node.js 只有在第一次引用到某部份时才会去解析脚本文件,以后都会直接访问内存,避免重复载入,而 PHP 则总是重新读取并解析脚本(如果没有专门的优化配置)。Node.js的这种设计虽然有利于提高性能,却不利于开发调试,因为我们在开发过程中总是希望修改后立即看到效果,而不是每次都要终止进程并重启。

  supervisor 可以帮助你实现这个功能,它会监视你对代码的改动,并自动重启 Node.js。使用方法很简单,首先使用 npm 安装 supervisor:

$ npm install -g supervisor

接下来,使用 supervisor 命令启动 app.js:

$ supervisor app.js
DEBUG: Running node-supervisor with
DEBUG: program 'app.js'
DEBUG: --watch '.'
DEBUG: --extensions 'node|js'
DEBUG: --exec 'node'
DEBUG: Starting child process with 'node app.js'
DEBUG: Watching directory '/home/byvoid/.' for changes.
HTTP server is listening at port 3000.

当代码被修改时,你可以看到终端输出:

DEBUG: crashing child
DEBUG: Starting child process with 'node app.js'
HTTP server is listening at port 3000.

supervisor 这个小工具可以解决开发中的调试问题。

3.模块和包

  模块(Module)和包(Package)是 Node.js 最重要的支柱。开发一个具有一定规模的程序不可能只用一个文件,通常需要把各个功能拆分、封装,然后组合起来,模块正是为了实现这种方式而诞生的。在浏览器 JavaScript 中,脚本模块的拆分和组合通常使用 HTML 的script 标签来实现。Node.js 提供了 require 函数来调用其他模块,而且模块都是基于文件的,机制十分简单。

  Node.js 的模块和包机制的实现参照了 CommonJS 的标准,但并未完全遵循。不过两者的区别并不大,一般来说你大可不必担心,只有当你试图制作一个除了支持 Node.js之外还要支持其他平台的模块或包的时候才需要仔细研究。通常,两者没有直接冲突的地方。  

  我们经常把 Node.js 的模块和包相提并论,因为模块和包是没有本质区别的,两个概念也时常混用。如果要辨析,那么可以把包理解成是实现了某个功能模块的集合,用于发布和维护。对使用者来说,模块和包的区别是透明的,因此经常不作区分。我们会详细介绍:

3.1什么是模块

  模块是 Node.js 应用程序的基本组成部分文件和模块是一一对应的。换言之,一个Node.js 文件就是一个模块,这个文件可能是 JavaScript 代码、JSON 或者编译过的 C/C++ 扩展。在前面章节的例子中,我们曾经用到了 var http = require('http'),其中 http是 Node.js 的一个核心模块,其内部是用 C++ 实现的,外部用 JavaScript 封装。我们通过require 函数获取了这个模块,然后才能使用其中的对象。

3.2创建及加载模块

  在 Node.js 中,创建一个模块非常简单,因为一个文件就是一个模块,我们要关注的问题仅仅在于如何在其他文件中获取这个模块。Node.js 提供了 exportsrequire 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。让我们以一个例子来了解模块。创建一个 module.js 的文件,内容是:

//module.js
var name;
exports.setName = function(thyName) {
name = thyName;
};
exports.sayHello = function() {
console.log('Hello ' + name);
};

在同一目录下创建 getmodule.js,内容是:

//getmodule.js
var myModule = require('./module');
myModule.setName('BYVoid');
myModule.sayHello();

运行node getmodule.js,结果是:Hello BYVoid。

  在以上示例中,module.js 通过 exports 对象把 setName 和 sayHello 作为模块的访问接口,在 getmodule.js 中通过 require('./module') 加载这个模块,然后就可以直接访问 module.js 中 exports 对象的成员函数了。这种接口封装方式比许多语言要简洁得多,同时也不失优雅,未引入违反语义的特性,符合传统的编程逻辑。在这个基础上,我们可以构建大型的应用程序,npm 提供的上万个模块都是通过这种简单的方式搭建起来的。

上面这个例子有点类似于创建一个对象,但实际上和对象又有本质的区别,因为require 不会重复加载模块,也就是说无论调用多少次 require,获得的模块都是同一个。

  事实上,exports 本身仅仅是一个普通的空对象,即 {},它专门用来声明接口,本质上是通过它为模块闭包①的内部建立了一个有限的访问接口。

3.3创建包

  包是在模块基础上更深一步的抽象,Node.js 的包类似于 C/C++ 的函数库或者 Java/.Net的类库。它将某个独立的功能封装起来,用于发布、更新、依赖管理和版本控制。Node.js 根据 CommonJS 规范实现了包机制,开发了 npm来解决包的发布和获取需求。

  Node.js 的包是一个目录,其中包含一个 JSON 格式的包说明文件 package.json。严格符合 CommonJS 规范的包应该具备以下特征:

  • package.json 必须在包的顶层目录下;
  • 二进制文件应该在 bin 目录下;
  • JavaScript 代码应该在 lib 目录下;
  • 文档应该在 doc 目录下;
  • 单元测试应该在 test 目录下。
    Node.js 对包的要求并没有这么严格,只要顶层目录下有 package.json,并符合一些规范即可。当然为了提高兼容性,我们还是建议你在制作包的时候,严格遵守 CommonJS 规范。

作为文件夹的模块

  模块与文件是一一对应的。文件不仅可以是 JavaScript 代码或二进制代码,还可以是一个文件夹。最简单的包,就是一个作为文件夹的模块。下面我们来看一个例子,建立一个叫做 somepackage 的文件夹,在其中创建 index.js,内容如下:

//somepackage/index.js
exports.hello = function() {
console.log('Hello.');
};

然后在 somepackage 之外建立 getpackage.js,内容如下:

//getpackage.js
var somePackage = require('./somepackage');
somePackage.hello();

运行 node getpackage.js,控制台将输出结果 Hello.。

我们使用这种方法可以把文件夹封装为一个模块,即所谓的包。包通常是一些模块的集合,在模块的基础上提供了更高层的抽象,相当于提供了一些固定接口的函数库。通过定制package.json,我们可以创建更复杂、更完善、更符合规范的包用于发布。

package.json

在前面例子中的 somepackage 文件夹下,我们创建一个叫做 package.json 的文件,内容如下所示:

{
"main" : "./lib/interface.js"
}

然后将 index.js 重命名为 interface.js 并放入 lib 子文件夹下。以同样的方式再次调用这个包,依然可以正常使用。Node.js 在调用某个包时,会首先检查包中 package.json 文件的 main 字段,将其作为包的接口模块,如果 package.json 或 main 字段不存在,会尝试寻找 index.js 或 index.node 作为包的接口。

package.json 是 CommonJS 规定的用来描述包的文件,完全符合规范的 package.json 文件应该含有以下字段:

  • name:包的名称,必须是唯一的,由小写英文字母、数字和下划线组成,不能包含空格。
  • description:包的简要说明。
  • version:符合语义化版本识别规范的版本字符串。
  • keywords:关键字数组,通常用于搜索。
  • maintainers:维护者数组,每个元素要包含 name、email (可选)、web (可选)字段。
  • contributors:贡献者数组,格式与maintainers相同。包的作者应该是贡献者数组的第一个元素。
  • bugs:提交bug的地址,可以是网址或者电子邮件地址。
  • licenses:许可证数组,每个元素要包含 type (许可证的名称)和 url (链接到许可证文本的地址)字段。
  • repositories:仓库托管地址数组,每个元素要包含 type (仓库的类型,如 git )、url (仓库的地址)和 path (相对于仓库的路径,可选)字段。
  • dependencies:包的依赖,一个关联数组,由包名称和版本号组成。

    3.4 Node.js 包管理器

    Node.js包管理器,即npm是 Node.js 官方提供的包管理工具,它已经成了 Node.js 包的标准发布平台,用于 Node.js 包的发布、传播、依赖控制。npm 提供了命令行工具,使你可以方便地下载、安装、升级、删除包,也可以让你作为开发者发布并维护包。

    • 获取一个包 : npm [install/i] [package_name]

      本地模式和全局模式:为什么要使用全局模式呢?多数时候并不是因为许多程序都有可能用到它,为了减少多重副本而使用全局模式,而是因为本地模式不会注册 PATH 环境变量。

    • 总而言之,当我们要把某个包作为工程运行时的一部分时,通过本地模式获取,如果要
      在命令行下使用,则使用全局模式安装。
    • npm包的发布

4.调试

  本地调试:node debug script.js

  远程调试

  工具调试等。

nodejs快速入门的更多相关文章

  1. 我的nodejs 快速入门

    每行以封号结尾(可有可无) 变量定义没有类型 都用var 或者直接const log打印:console.log(db); 内置属性这样写法:__filename.__dirname等 functio ...

  2. Nodejs ORM框架Sequelize快速入门

    Nodejs ORM框架Sequelize快速入门 什么是ORM? 简单的讲就是对SQL查询语句的封装,让我们可以用OOP的方式操作数据库,优雅的生成安全.可维护的SQL代码.直观上,是一种Model ...

  3. Linux快速入门04-扩展知识

    这部分是快速学习的最后一部分知识,其中最重要的内容就是源码的打包和软件的安装的学习,由于个人的Linux学习目的就是自己能在阿里云Ubuntu上搭建一个简单的nodejs发布环境. Linux系列文章 ...

  4. Html与CSS快速入门03-CSS基础应用

    这部分是html细节知识的学习. 快速入门系列--HTML-01简介 快速入门系列--HTML-02基础元素 快速入门系列--HTML-03高级元素和布局 快速入门系列--HTML-04进阶概念 边框 ...

  5. Html与CSS快速入门04-进阶应用

    这部分是html细节知识的学习. 快速入门系列--HTML-01简介 快速入门系列--HTML-02基础元素 快速入门系列--HTML-03高级元素和布局 快速入门系列--HTML-04进阶概念 之前 ...

  6. Node.js快速入门

    Node.js是什么? Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架. 它的最新版本是:v0.12.7(在编写本教程时的版本).Node.js在官方 ...

  7. gulp快速入门

    gulp快速入门 因为之前一直有人给我推荐gulp,说他这里好哪里好的.实际上对我来说够用就行.grunt熟悉以后实际上他的配置也不难,说到效率的话如果真是要完整打包上线也不在乎那么几秒时间,对于项目 ...

  8. gulp快速入门&初体验

    前言 一句话先 gulp 是一个可以简单和自动化"管理"前端文件的构建工具 先说我以前的主要工作,我主要是做游戏服务端的,用c++/python,所以我对东西的概念理解难免要套到自 ...

  9. Spring Boot 2.x 快速入门(下)HelloWorld示例详解

    上篇 Spring Boot 2.x 快速入门(上)HelloWorld示例 进行了Sprint Boot的快速入门,以实际的示例代码来练手,总比光看书要强很多嘛,最好的就是边看.边写.边记.边展示. ...

随机推荐

  1. DevExpress 使用 XtraTabbedMdiManager 控件以 Tab样式加载 Mdi窗体并合并 RibbonControl 解决方案

    最近刚接触到 DevExpress 13.1 这个皮肤组件, 觉得相当好用 于是开始准备搭建 个小应用的主体框架. 找了好久的就是没找到对应的文章来讲解这一块.. 翻了他们主网站上人家问的,以及API ...

  2. Android去除CPU占用过高时屏幕四周闪红框

    话说有些时间没有更新博客了,今天正好解决这个问题,顺便把它记录下来.. 今天遇到的情况是这样的,当CPU占用过高时,屏幕四周会出现一个红框. 闪一次两次算了,但是挺萌的(TMD)不停的闪,我的钛合金狗 ...

  3. jdk 1.5

    1995.5.23 java语言诞生 sun公司推出java语言的同时,也推出了一系列的开发工具,比如JDK(java development Kit)JVMjava API 时间 版本 API 用途 ...

  4. Windows Phone自定义控件 ProgressRing

    前言 Windows Phone为开发者提供了很多原生控件,但在很多场景下我们需要对默认的功能或样式做一定的修改才能满足我们的需求,自定义控件应运而生.本文通过以自定义控件进度环(ProgressRi ...

  5. 7.FPGA中的同步复位与异步复位

    1.异步复位 always @ ( posedge sclk or negedge s_rst_n ) if ( !s_rst_n ) d_out <= 1'b0; else d_out < ...

  6. iOS 进阶 第二十天(0520)

    0520 -KVO 如下图所示:(面试可能会问到,你就按照下面的说) 注意:NSString类型的成员变量用set方法时,要记得用copy,至于为什么,知道这么用就行了.如下图:

  7. FastDFS安装配置

    FastDFS FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下载等服务 ...

  8. 微软职位内部推荐-Senior SDE

    微软近期Open的职位: Position: Senior SDE-- Mobile Products Android/iOS/WP Senior Developer Contact Person: ...

  9. linux下的clock skew detected

    今天在虚拟机上用GCC编译一个程序的时候,出现了下面的错误: make: warning: Clock skew detected. Your build may be incomplete 试了ma ...

  10. nscd

    作用: Nscd is a daemon that provides a cache for the most common name service requests 可以缓存passwd,grou ...