Nodejs学习笔记-1

目前nodejs的最新版本是:

在官网下载 nodejs.version.x86.msi/exe ,然后安装. 然后运行node hello.js
就像php的php命令, java中的javac等命令行命令一样. 其中console.log就是在cmd的控制台(类似c语言的命令行程序print)输出.

下载的网站, 包括原始 的 官方的站点,就是: https://nodejs.org/(但是很缓慢), 可以使用nodejs.cn相当于一个中文的映射站点, 速度很快: nodejs.cn

下载的内容包括: node.exe, node.lib, node_pdb.zip(pdb: private本地调试/public远程调试 debug文件, 是exe/application跟源代码之间的桥梁,通过pdb才能看到代码执行的行和监视变量 )
下载时, 只需要下载node.exe就好了. (不要直接在下载列表中下载,那个是从原始地址 nodejs.org下载...)

node.js不应该看作是一个/一种js文件, 也不是一种js语言, 而应该看作是一种服务器端的web脚本开发语言, 如同php一样, 看作是"node.js"一个整体.

在windows下安装最新的 node-v6.10.2-x86.exe, 会自动安装npm并注册到path全局路径(包括node, npm等).

现在的node.js版本飙升很快, 几乎一个月就在升级一次, 现在这个时间点, 下载的是 v6.10.2版本, 其中包括v8, npm等版本号..

node.js输入命令node后, 就进入node的交互界面, 如同mysql, php, matlab等交互界面环境,在这个环境中, 就可以进行变量赋值/输出, 语句的执行等等.

由于node.js实际上是用C语言在linux下开发(后)/移植到win上的, 所以即使在win中, 也可以使用linux的shell的操作方式, 包括ctrl+p, ctrl_N, ctrl_h等操作...

node.js中, 字符串可以加上一个数字, 但是 一个字符串*n, 将会 返回 NaN. (not a number), 其他在nodejs中的操作, 跟 前端的js 脚本的语法基本上是一样的, 比如也支持function函数的定义等,
而且, node.js的命令行, 还支持shell下的 tab 补全和提示.


node.js的创始人 Ryan Dahl: 瑞达尔. 最开始选择尝试了 Lua, C, Haskell(是美国的逻辑学家, haskell是一种函数式编程语言, 如同c语言一样).
nodejs是一种事件驱动, 非i/o阻塞的轻量化的服务器端脚本语言.

随着网络的发展, 现在的b/s程序已经基本上/大量地代替了c/s程序.

libuv 是 Node 的跨平台抽象层,跨平台事件库, 封装了windows和类unix系统的事件库: 用于抽象 Windows 的 IOCP 及 Unix 的 libev(libevent事件库)
作者打算在这个库的包含所有平台的差异性。特性: 非阻塞 TCP 套接字, 非阻塞命名管道...
libuv中的uv是指: ultra libevent(libev)的意思:

在node的命令行界面, 输出后显示 "undefined" , 是表示没有定义返回值. 如果有返回值 则不会输出"undefined"

特殊的命令, 如.help, .break, .exit, .load .editor等是对命令行模式的操作, 需要使用带点的命令..


nodejs跟前端js的语法基本一样, 大量的使用了 "匿名函数, 回调函数, 闭包", 定义变量也是采用var的方式, 不显式声明变量类型. 跟js是一样的语法.
在多个options并列的参数时, 使用{} 表示的对象...

nodejs的执行方式, 就好象nodejs是一个程序一样, 如同apache一样, 但是他比apache要更简单, 没有那么多, 那么复杂的什么服务啊, 什么进程啊, 什么daemon啊的概念
. 只要你执行一下node your_server.js, 你的服务器就启动了.

windows下,使用curl.

curl是用来在命令行获取网页/内容的应用程序, 而且通过选项可以 看到request/response的一些细节.

给某一个命令 增加环境变量,可以有 两种方式:
一种是, 直接在path变量中, 输入命令路径;
二种, 是先创建一个命令的环境变量foo,(随便什么名字都可以), 然后在path变量中, 增加这个环境变量. 引用环境变量的格式 : %foo%

还有一种方式, 是将命令本身或其快捷方式 放在 c:\windows\system32下.

windows下curl的使用方法: 参考: http://www.tuicool.com/articles/Ar6vymf

  1. windows的curl-win32的下载地址是: 在curl的首页中, 搜索: win32, 找到windows平台的下载地址,然后链接:

curl实际上是一个 "文件传输工具" 支持的协议包括很多(注意区别, 一个是文件传输协议, 如http, ftp等, 另一个是文件传输的工具, 这个工具利用/支持这些文件传输协议...)

curl的几个比较重要的options: 参考: http://www.cnblogs.com/gbyukg/p/3326825.html

  • curl -o (这个是写入到指定的文件中), 默认的是下载输出到stdout. (这个选项也可以使用重定向: curl http://localhost > foo.html)

  • curl -O : 这个是保持到(当前目录中), 保持原来的文件名不变

  • curl -i: 输出文件头信息 + 文件本身的内容

  • curl -I : 只输出文件头信息

  • curl -v: 是verbose, 输出详细过程

  • curl -V : 是version, 显示版本号 注意-v和-V是不同的:

  • curl -C -o foo.html http://localhost -C 表示continue , 默认的curl是会重新下载原来未下载完成的文件, 加-C则会断点续出.

  • --limit-rate是真正的限速, 而-Y, 或 --speed-limit是表示低于这个速度, 则停止下载, 相当于规定最低速度. 而--limit-rate相当于规定最高速度

  • 还有一些 -u等命令

  • curl -X COMMAND , 表示你请求的命令方法, 如是get, post, put, delete等等, 这个一般不用, 即使使用, 最多的也主要是get. curl -i -X get http://localhost/


注意nodejs 的执行方式: 需要开启两个cmd cli命令行界面: 一个是用来启动node.js服务器, 其中服务器的名字, 就是你写的js文件: node c:\wamp\www\server.js 另一个才是用 curl来测试 服务器上的内容...

下面的图形, 分析了node.js的执行过程:

  1. node.js是一个程序 , 软件, 可以单独执行, 跟apache, wampserver等服务器没有什么关系
  2. 分成两个部分. server端启动时 node server(注意不用加js后缀名),js文件此时并不会马上执行, 只是出于daemon状态. 直到 有客户端 通过curl, firefox等浏览器来请求这个 服务器对应的端口时, 由node server 来监听这个端口. node才会将 server.js的内容输出.
  3. server.js输出的内容, 分成两部分, 一部分是输出到服务器上的, 如console.log等的输出, 另一部分是 response对象的end("输出到请求端的信息内容...")方法输出的内容, 这部分内容是输出到客户端client请求端的.

nodejs的调试过程:

  1. 使用命令是: node debug your_nodejs_filename
  2. debug中的命令, 命令行跟 ide调试方法是一样的, 如setbreak : sb设置断点, continue: cont等等.
  3. 应该先设置断点, 然后才进行调试,
  4. 在调试模式下, 可以通过输出变量的值 , 来查看程序的错误...

停车是一门学问, 要看停车的环境, 平整度等等 . 总之一点就是: "最好的停车, 是尽量保持车辆的 各零部件处于不 受力的状态" 如果在平整路面熟悉的环境中, 可以: 先空档手刹, 熄火, (但是注意, 此时, 车辆的 轮胎, 悬架等仍然处于受力的状态, 而且这种力量是由 手刹的钢丝/弹簧在承受的), 因此, 要解除这种应力: 再次松开手刹!!!, 备刹车, 等到汽车平稳后, 应力完全释放后, 再拉起手刹, 平整熟悉路面环境, 可以直接用一档档位来卡, 不用拉手刹. 因为手刹拉起就要工作, 而档位本身(注意在应力完全释放后)不工作. 只是起到"防御性"的作用! (但是要注意 用档位来卡, 一定要等到应力释放完后, 否则也有应力作用在齿轮上 总之, 要让车辆处于无 应力, 完全不受力的状态!

npm和cnpm的区别?

npm的速度被墙的很慢, 使用cnpm: npm的镜像来管理nodejs包.
cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm(以下操作将以cnpm代替npm)


nodejs导入模块(模块就相当于c++中的类, tp中的include/require), 使用的语句也是: require: var http= require('http');

node执行一个目录的时候, 如果不指定文件名, 会自动搜索这个目录下的index.js文件进行执行.
或者在目录下 执行 点命令: node .

包的类型有三种:
core modules
node_modules(这个是第三方的包) 安装其他模块时, 会创建node_modules这个目录
local_modules, 本地模块, 是自己写的模块.

如何创建本地模块?

创建文件 myModule.js

var name= "foo";
module.exports.name = name;  //这里要使用关键字 module. exports.. 等...


然后在 你自己的js文件中, 通过: require('myModule'); 这里的myModule就是你创建的本地文件的名称. 就好了...

注意sever和server的区别, 前面sever中, 没有ser, 只是se. 表示"割裂, 断开(关系)" a knife to sever any relationship with sb.

linux世界中的常用 通用快捷键:

  1. linux里面, 查看文件/系统/设备等的信息, 都是用 ctrl+I 快捷键.**
  2. 显示和隐藏".开头的文件/目录" 使用ctrl+H, 注意不是super_H, 后者是隐藏当前窗口.

免费软件有: free, gratis[gr2tis], libre(自由). (不同于 liberate, liberation解放)
openOffice.org原来是sun公司,被oracle收购后加强了版权,然后google-redhat-Novell成立了the document fundation组织.开发了完成自由的libreoffice. 现在的很多linux dist都默认自带的 LibreOffice. 而且Libre比open对word的兼容性更好.

微软的word等office中 自带了simsun.ttf字体, (其实就是宋体, 它是ms向中易中标电子信息co.购买的, 然后改名的). 而Libreoffice由于没有宋体(simsun.ttf)字体, 所以中文显示为乱码


关于字体文件simsun.ttc?
ttc: compose是两个ttf字体文件的合并, 两个ttf文件中的汉字通常是一样的, 而英文字母的宽度等可能不一致, 就把两个基础的基本的base- ttf文件(simsunb.ttf) 合并成一个ttc文件.

全局配置和 当前用户配置的区别?

  1. 全局配置就是将配置文件, 放在系统的相关文件夹中, 如 放在linux的字体目录默认是在: /usr/share/fonts下, 这时行, 所有的用户都可以访问.
  2. 用户配置, 就是只对当前用户生效的, 通常放在 ~/.config目录中, 或者~/.libreoffice等app_name目录中.比如, Libreoffice的用户字体文件就放在 ~/.config/libreoffice/4(版本号,fc23的版本号是5了)/usr/fonts(fonts目录要自己去创建) , 然后将ttc字体文件 cp到 fonts目录中即可. 在这之后, 就可以创建和保存,打开 包含中文字体的doc文件了.

posted @ 2017-04-16 21:11  noitanym  阅读(1620)  评论(0编辑  收藏  举报