我是如何学习NodeJs
实际上在开始的时候我已经对NodeJS有了一定的了解。
比如我知道它是居于Javascript语言的服务器端web Server,比如我知道它的优势在于它的性能,而造成性能优异的原因在于高效的V8引擎,也就是编译器,以及其它一些语言层面的东东,无非就是JS一些语言的特点,函数,异步,回调之类的。
所以对于这样的一项技术我已经知道它的优点缺点以及技术的方向,也许有人会问我深入学习它的目的是什么?答案可能很搞笑,我想做个HTML5版本的 三国杀,用来和同事无聊的时候娱乐用,或者其它一些简单点的支持socket的web游戏。而学习NodeJS的原因在于它支持websocket,就这 么简单。虽然其它一些语言也可以轻松实现websocket server,甚至codeplex上就有开源的C#实现。但是程序员吗,如果不多折腾怎么进步,于是开始了我的NodeJS折腾之旅。
但是在具体学习的时候,我还是遇到了开始时候想象不到的很多困难,下面就是对学习过程的一个简单记录。
1.
当然是Google开始,难道你还能找到其它途径吗?
第一条搜索记录显然就是www.NodeJS.org这个官方网站,很简洁的网站。
发现最中间好大的一个Download按钮,不管许多,下载之。发现是一个msi文件,那还考虑什么,安装吧。(Windows OS)
安装的过程很简单,以至于我连图都不愿意贴了,简单到隔壁的大妈肯定都能轻松的安装上的程度。:)
后来才发现,在Linux下和Mac下都要比Windows下折腾麻烦一些,Windows下的青年们果然都是小白。。。(本人从不认为 Windows比Linux要差,甚至在易用性扩展性方面远远超过Linux,但是从程序员的角度来说,用Linux确实比windows要好,因为它总 是强迫你折腾,而折腾正是程序员前进的保证)
2.
OK,开始程序员的永远的第一步“Hello World”,这年头,学习一门新技术,如果你不弄个Hello World,你都不好意思出来混。
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(8080);
这样就完事了,将这几句话copy近一个server.js的文件中,然后你需要打开命令行(强烈推荐使用PowerShell,我现在都没有搞明白用CMD的话除了关掉窗口怎么停止或者Restart),运行
node server.js
接下来,打开浏览器访问http://localhost:8080/,你会看到一个写着“Hello World”的网页。
这几句话应该都能看明白,不解释了。
3.
接下来自然而然的就想如何弄Web Socket的Server了,于是继续Google之,发现需要安装NodeJS的模块socket.io(这东西个人的理解就是类似于Java中的第三方库的意思)
安装模块的方式一般是通过NPM,对于NPM完全没有概念,于是继续Google之。
找到一篇文章介绍NPM的http://howtonode.org/introduction-to-npm,看了下,大概有了一些了解。(文章不错,推荐下)
NPM就是NodeJS Package Management的缩写。目前的NodeJS已经自带NPM了。
这里简单介绍几个npm 命令,
npm list – 查看当前安装的模块
npm version – 查看当前npm的版本
npm install – 安装新模块
npm update – 更新模块
npm help – 帮助(这个最重要)
其它命令可以去帮助文件中查询,或者敲击最上面的npm help命令
安装的命令很简单,你可以运行 npm help install获取更多帮助(发现npm的帮助文件做的相当的不错,例如运行上面的命令会自动打开一个htm帮助文件)
npm Install socket.io
npm install express
有些文章会提示这个命令可以加上-g或者-d,例如
npm install –g socket.io
搜索了下-g,-d是什么意思,没有什么好的答案,后来在config的帮助文件中找到了答案(有很多时候帮助文件比Google靠谱的多)
按照帮助文件的说法,-g,-d其实就是Shorthand(缩记),说白了就是缩记符,他们分别代表的是
g – global
d – log lever info
还有其它的一些缩记符,你可以在帮助文件中找到他们
4.
于是开始安装模块,看起来很简单,但是这个时候问题出现了,我怎么都连接不上服务器
总是提示这个错误
npm http GET https://registry.npmjs.org/express
Error: failed to fetch from registry
看了下这个命令和执行过程,怀疑是下载一些包和文件之类的东东回来。
由于我是在单位折腾的,所以怀疑是网络环境的问题,因为没有办法通过服务器的审查,所以不允许下载。
(1) 最开始想到的办法是将https改为http,不使用ssl这样的https传输协议,于是找到了修改配置的命令
npm config set registry http://registry.npmjs.org/express
npm config set strict-ssl false
更改之后,发现无效
(2) 因为其实就是下载文件,所有有的网站提到了可以将默认的http://registry.npmjs.org/express更改为其它网站,并给了几个网址,可以通过上面的更改配置的方式更改,还是无效
(3) 最后无奈换了个网络环境之后,发现可以安装了,感觉应该是下载了安装包,不会有其它变化(比如写入注册表之类的),所以将整个目录copy了过来,并且进行了验证,发现是好用的,你可以通过如下语句验证
npm list
于是,环境终于算是搭建完成了,可以开始下面的工作了
几个注意事项及总结:
1. NodeJS的模块路径是nodejs的安装目录下面的node_modules子目录,例如我的是
C:\Program Files\nodejs\node_modules
2.很多命令都需要node执行,比如
node –v
node –help
node是一个命令行的执行程序,在NodeJS的根目录中能够找到
3.很多命令都需要npm的执行,你可以在NodeJS的根目录中找到npm.cmd这个文件
4.发现自己的命令行功底真的弱爆了,很多时候对于命令行都挺无奈的。。。
5.帮助文档很重要,有很多时候比Google定位问题要准确的多
6.有准备的去找答案和瞎碰完全就是两个概念
7.多折腾总归是有好处的,千万不要怕折腾
我是如何学习NodeJs的更多相关文章
- 学习Nodejs之mysql
学习Nodejs连接mysql数据库: 1.先安装mysql数据库 npm install mysql 2.测试连接数据库: var sql = require("mysql"); ...
- ACEXML解析XML文件——我是如何学习并在短时间内掌握一个库的使用方法的
最近做的C++项目中需要使用xml文件保存一些信息,程序启动时会读取这些信息.最终经过主程的评测,决定使用ACEXML库来读取解析XML文件. 好吧,至于为什么选择ACEXML库,我就不说了.既然选择 ...
- 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助
初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: var fs = require('f ...
- Javascript的二进制数据处理学习 ——nodejs环境和浏览器环境分别分析
以前用JavaScript主要是处理常规的数字.字符串.数组对象等数据,基本没有试过用JavaScript处理二进制数据块,最近的项目中涉及到这方面的东西,就花一段时间学了下这方面的API,在此总结一 ...
- 学习nodejs有感
接触nodejs一段时间了,不断的去接触接触,nodejs是一个能让前端程序员做后台开发的一项技术. 随着学习,让我更好的理解了前后端,以及浏览器是如何运作的
- 学习NodeJS第一天:node.js引言
Node.JS 是资深 C 程序猿 Ryan Dahl(http://four.livejournal.com/)的作品,根据 Google 著名的开源 JavaScript 引擎 V8 来进行二次开 ...
- 学习NodeJS第一天:node.js介绍
Node.JS 前辈 C 程序猿 Ryan Dahl(http://four.livejournal.com/)工程,根据 Google 著名的开源 JavaScript 发动机 V8 对于二次开发 ...
- 我是这样学习使用google学术的
本科期间一直在cnki上面检索论文,随着科研能力的需要,部分论文在cnki的局限性就体现出来了,我就开始培养自己的文献检索能力.现在的各种开发工具,各种论文检索网站再加上文献检索的形式越来越复杂,我们 ...
- 学习Nodejs:《Node.js开发指南》微博项目express2迁移至express4过程中填的坑
<Node.js开发指南>项目地址https://github.com/BYVoid/microblog好不容易找到的基础版教程,但书中是基于express2的,而现在用的是express ...
随机推荐
- 源泉书签,助您管理海量收藏。www.yuanquanshuqian.com,今日更新:多标签功能已实现
源泉书签.助您管理海量收藏.www.yuanquanshuqian.com,今日更新:多标签功能已实现
- 经验总结17--submitbutton,ajax提交
发篇小文章,纪念七七事变. submit一般用于提交表单,可是想使用ajax进行提交,又想按"enter"触发button. 那么就阻止提交表单的事件,进行自己定义的提交. 1.让 ...
- fork和exec函数
#include<unistd.h> pid_t fork(void); 返回:在子进程中为0,在父进程中为子进程IO,若出错则为- fork最困难之处在于调用它一次,它却返回两次.它在调 ...
- LabVIEW系列——错误簇的传递
从以下示例可以得出结论: 1.图一出现的三种错误,分别位于打开/创建/替换文件函数,写入文本文件函数,读取文件文件函数.说明三个函数都被运行了. 2.图二只出现了一种错误,位于打开/创建/替换文件函数 ...
- 使用gradle构建java项目
gradle是什么东东 gradle是继ant,maven之后另外一种的面向java的自动化项目构建工具,他是基于groovy语言的.相对于ant,maven,gradle显得更加简单. 安装grad ...
- winform windowsmediaplayer的属性
首先将C:\WINDOWS\system32下的wmp.dll应用到项目中: WMPLib.WindowsMediaPlayerClass player = new WMPLib.WindowsMed ...
- java - import *
以前看过很多视频,现在发觉很多讲师讲的有些地方是错的,在这里就说一下 import *,例如: import java.util.*的时候,表示的是将文件中使用到的类(而不是全部类)导入,例如在imp ...
- Android-The specified child already has a parent. You must call removeView() on the child's parent first.
这个问题搞了我半天了,网上有很多人说需要找到该控件的parent后,让该parent 先remove需要添加的控件,然后在添加,如: if (view != null) { ViewGroup par ...
- Android - 折线图
使用Android的canvas,画折线图:代码为: package spt.view; import android.annotation.SuppressLint; import android. ...
- MSSQL 各个发行版本版本号以及Compact 版本号
终于开始写博客了. 不要笑啊. 下面是MSSQL 的发行版本以及版本号.自己整理的. http://support.microsoft.com/kb/321185/zh-cn SQL Server 2 ...