node.js入门教程

  1. nodejs和npm的安装
  2. 体验一下
  3. Hello World 之 Node.js
  4. 基础之Npm使用
  5. Node之模块
  6. 熟悉常用的内置模块
  7. express框架

1. nodejs和npm的安装

可从Node.js官网,下载对应平台的nodejs版本进行安装,(window系统,可勾选Add to Path 添加到环境变量中)

在命令行界面输入以下两个命令,检验是否安装成功:

# node -v       //查看node版本
# npm -v        //查看npm版本

linux安装(官网下载源码或已编译的二进制文件进行安装)

wget https://nodejs.org/dist/v8.11.3/node-v8.11.3.tar.gz
wget https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz

安装较window不同,但也不难,自行百度。


node.js是什么?

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.(基于谷歌v8引擎的js运行环境)

我们之前写的JavaScript都是在浏览器上执行的,用的是浏览器中的JavaScript引擎,而node自带了JavaScript的执行环境,这就让js可以在浏览器以外的地方执行,可以在服务器端执行

Node.js还提供了各种丰富的JavaScript模块库(自带的+第三方提供),它极大简化了使用Node.js来扩展Web应用程序的开发。

Node.js = 运行环境+ JavaScript库(模块)


npm是啥?

npm其实是Node.js的包管理工具(package manager)

  • 通过这个集中的包管理工具,方便直接下载引用别人已经发表的模块
  • 自动帮你解决你引用的模块的依赖关系(如:你引用的模块,若引用了其他的模块,你就需要把它依赖的模块也下下来)

#注:各类大同小异的包管理工具,基本都是起上述两点作用,帮助开发者提高开发效率


2. 体验一下

Node的交互模式 我们输入js代码可立即执行

C:\User\D-lyw>node
>

例如:在该环境下,输入以下,回车:

> 5*9 - 40
5

可以看到输出的结果 5

如果我们将js代码写在.js文件中,我们使用命令 node 文件.js
创建test.js文件,写入代码

var name = '张三';
console.log('Your name is ' + name);

执行 node test.js , 输出结果

C:\User\D-lyw\node test.js   //注意你创建的test.js文件的位置,不然node命令会找不到该文件
Your name is 张三

3. Hello World 之 Node.js

创建node.js 应用

  • 步骤一: 导入所需模块

    使用require指令加载http模块 ,并用变量http 存储

      var http = require('http')
    
  • 步骤二: 接下来,使用http模块中的createServer() 方法创建服务器实例,使用服务器实例的监听方法, 将其绑定到某一接口,并为其编写请求和相应函数;

      var http = require('http');
    
      http.createServer(function (request, response) {
    
      // 发送 HTTP 头部 
      // 内容类型: text/plain
      response.writeHead(200, {'Content-Type': 'text/plain'});
    
      // 发送响应数据 "Hello World"
      response.end('Hello World\n');
      }).listen(8080);
    
      // 终端打印如下信息
      console.log('Server running at localhost:8080!');
    

上述代码就已经帮我们创建了一个简单服务器

  • 步骤三: 通过node 命令执行该js文件,如

      node main.js
      Server running at localhost:8080!
    

而在浏览器输入localhost:8080,就可以看到我们返回的Hello World.

4. 基础之Npm使用

掌握npm常用命令

  • npm 升级命令

      npm install npm -g                  // -g 指全局安装,下同
    
  • npm 安装模块

      npm install <Moudle Name>               //Moudle Name指模块名
      例 安装常用web框架 express:
      npm install express 
    
  • npm 查看安装信息

      npm list -g                         //查看全局安装的模块
    
  • npm 卸载模块

      npm uninstall <Moudle Name>
    
  • npm 更新模块

      npm update <Moudle Name>
    
  • npm 查看某个模块的版本号

      npm list grunt
    
  • npm 搜索模块

      npm search <Moudle Name>
    
  • npm help 可通过npm help 查看所有命令

通过npm安装的模块都在项目中的node_modules文件夹中,是全局安装的则在全局的node_modules文件夹中,widow系统中全局的node_modules一般在系统盘 用户文件夹下,如:C:\Users\D-lyw 里面

使用淘宝镜像

国内使用npm进行安装,下载有时比较缓慢,淘宝镜像与官方版本每十分钟同步,推荐使用淘宝镜像进行下载
# npm install -g cnpm --registry=https://registry.npm.taobao.org

这样就可以用cnpm 来代替 npm 进行下载
# cnpm install <Moudle Name>

5. Node之模块

在一个项目中随着项目的开发,一个文件里面的代码可能越来越多,越长,不宜与维护;
为了编写便于可维护、优雅的代码,我们将其分组,分别放到不同文件中,好多编程语言都采用这种方式
在node.js 这样的js文件成为一个模块
好处:

  • 便于维护
  • 代码重用,可以引用和被引用其他模块 (在nodejs,我们经常引用内置模块和第三方发布的模块,十分方便)
  • 使用模块,可以避免函数名和变量名的冲突

来个栗子: 我们创建一个testA.js 文件,并写下如下代码,这即是一个模块,模块名为testA(去掉.js)

var age = 42;
function showAge(){
    console.log("My age is " + (age - 18));
}

module.exports = showAge;

我们在testA模块里面声明了一个showAge函数,并且通过module.exports 语句将该函数给暴露出来,我们通过引入该模块,就可以使用showAge函数方法了

我们再写一个app.js文件,引入该模块并使用

var showAge = require('./testA');           //引入testA模块

showAge()       // 执行showAge()函数  输入 My age is 24

变量showAge 存储的是 testA模块中导出的showAge() 函数, 然后我们就可以在app.js中使用testA模块中的showAge方法了

在引用时注意引用的路径,上面两个文件是在同一目录下,所以用的相对路径

如果是通过 require('testA') 的方式引用

则node 会依次在内置模块、全局模块(即node_modules文件夹)下查找testA文件,如果查找不到,就会报错!

这种模块加载机制被称为CommonJS规范

一个模块想要对外暴露变量(可以是变量,函数,数组,对象等),可以用 **module.exports = variable **;,
一个模块要引用其他模块暴露的变量,用 var ref = require('module_name');就拿到了引用模块的变量。

# 篇幅有限,如想进一步了解Commonjs规范,可学习https://www.cnblogs.com/chenweixuan/p/4713710.html

6. 熟悉常用的内置模块

常用的模块有fs模块(文件读写),os模块(提供基本的系统操作), path模块(处理、转化文件路径),crypto模块(提供通用的加密和哈希算法)等等,都可以实际操作尝试一下

https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434501482448f6b36071ab6949d3a7ecb5a71a3c9df9000

可跟着其中教程的指导,对这些模块进行快速了解

7. express框架<重点>

网上教程很多,不重复累赘了,送你去https://www.runoob.com/nodejs/nodejs-express-framework.html

跟着菜鸟上的教程跑一遍, 理解一下,尝试着做点东西。

更全面的内容,可在文档中查看https://www.runoob.com/w3cnote/express-4-x-api.html, 也可直接去官网。

*** 注:***新手初期的话,可以看网上的各类好些的教程,基本懂了之后,去github上翻翻好的相关的代码,参考一下,不用难度太大的那种; 后面就好好看一下《深入浅出Node.js》,然后你就。。。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容