一、安装node.js

Download | Node.js

直接选择对应版本下载安装即可。

系统命令行输入如下命令

node -v

得到结果:

v10.15.3

表示安装成功。

简介

作为异步事件驱动的 JavaScript 运行时,Node.js 旨在构建可扩展的网络应用程序。它可以同时处理许多连接。每次连接时,都会触发回调,但如果没有工作要做,Node.js 将休眠。

Node.js 在设计上类似于 Ruby 的Event Machine和 Python 的Twisted等系统,并受其影响 。Node.js 更进一步地采用了事件模型。它将事件循环呈现为运行时构造而不是库。在其他系统中,总是有一个阻塞调用来启动事件循环。通常,行为是通过脚本开始时的回调定义的,最后通过像 EventMachine::run(). 在 Node.js 中,没有这样的 start-the-event-loop 调用。Node.js 只是在执行输入脚本后进入事件循环。当没有更多回调要执行时,Node.js 退出事件循环。这种行为就像浏览器 JavaScript——事件循环对用户隐藏。

HTTP 是 Node.js 中的一等公民,其设计考虑了流传输和低延迟。这使得 Node.js 非常适合作为 Web 库或框架的基础。

Node.js 被设计成没有线程并不意味着你不能在你的环境中利用多核。子进程可以通过使用我们的child_process.fork()API产生,并且被设计为易于通信。构建在相同接口上的是cluster模块,它允许您在进程之间共享套接字以启用内核的负载平衡。

总结

node.js是一个可以在js中接收和web请求的应用平台。i

二、初步使用node.js

这里使用WebStorm,可直接创建一个node.js的项目。在项目根目录,创建一个demo.js文件。

/**
* 这里暂时不要写带GUI的函数,汇报异常
**/var a=1;
var b=2;
console.log(a+b);

启用WebStorm的项目命令行控制台Terminal,输入命令

 node  demo.js

3

三、模块化编程

创建 demo2.js文件,

exports.add=function(a,b){return a+b;
}

在demo.js中引用

var demo=require("./demo2");//相对文件路径,不加.js的后缀,绝对的应该也可以
let a = demo.add(1000,100);
console.log(a);

启用WebStorm的项目命令行控制台Terminal,输入命令

 node  demo.js

1100

四、创建web服务器

创建demo_web.js文件,代码如下

//引入内置http模块
var http=require("http");
//创建并监听web服务器
http.createServer(function (request,response) {/*** 发送http头部* 参数1:响应状态码* 参数2:响应头部信息,Content-Type内容类型:纯文本*/response.writeHead(200,{"Content-Type":"text/plain"});/*** 发送响应数据*/for(var i=0;i<10;i++){response.write("Hello World \n")}response.end("Hello World \n");}).listen(80);
console.log("服务器运行在http://localhost:80");

命令行执行该脚本后会阻塞:

服务器运行在http://localhost:80

表示服务已经启动

可在浏览器中访问该地址,页面结果如下

Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World 

查看网页源代码,发现与页面内容一样,而且没有脚本代码,说明node.js尽管执行的是js脚本,但是执行过程在服务器中,返回结果给浏览器,而不是让浏览器执行js脚本。

可按下Ctrl+C结束该命令的阻塞状态,当然也意味着服务器停止运行。

五、处理Node的web服务器收到的请求参数

创建demo_web.js文件,代码如下

//引入内置http模块
var http=require("http");
//引入内置url解析模块
var url=require("url");
//创建并监听web服务器
http.createServer(function (request,response) {/*** 发送http头部* 参数1:响应状态码* 参数2:响应头部信息,Content-Type内容类型:纯文本*/response.writeHead(200,{"Content-Type":"text/plain"});/*** 解析请求地址* 参数1:请求地址* 参数2:true的话使用query解析参数到一个对象,默认false*/var params=url.parse(request.url,true).query;for(var key in params){response.write(key+"="+params[key]+" \n");}response.end("页面加载完成 \n");}).listen(80);
console.log("服务器运行在http://localhost:80");

命令行运行后,在浏览器打开如下网址:

http://localhost/?id=001&name=study%20make%20my%20happy

得到结果:

id=001
name=study make my happy
页面加载完成 

六、包资源管理器NPM

 什么是NPM
        npm全称Node Package Manager,是node包管理和分发工具。其实我们可以把NPM理解为前端的Maven 。通过npm 可以很方便地下载js库,管理前端工程。

现在的node.js已经集成了npm工具,在命令提示符输入 npm -v 可查看当前npm版本。

在一个空项目中,想要引用js库内容,需要先在项目的命令行进行初始化命令(可能需要管理员权限):

npm  init

命令行,会出现填空或选择语句,根据提示内容进行填写,最后它会帮你在项目根目录生成一个package.json文件。内容大致如下

{
  "name": "node1",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": ""
}

一般默认,或者为空即可。后续可以在该文件中进行更改。

这里有一个"main",它对应的是一个入口文件,比如你要引入很多的库模块,可在一个index.js文件中引入全部所需模块,然后在应用的项目引入该index.js文件即可。

在项目中引入js库

项目命令行执行:

npm install express

等待几分钟,命令执行完,项目中会出现一个node_modules的文件夹,该文件夹内就是下载导入的js库,同时在package.json的依赖选项中会自动登记该库的版本号;

"dependencies": {"express": "^4.17.1"
}

"express"的内容有三种写法

"4.17.1"

"~4.17.1"

"^4.17.1"

指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
        波浪号(tilde)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
        插入号(caret)+指定版本:比如^1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。

需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
latest:安装最新版本。

这个的作用:当你在查看别人代码,发现没有相应的js库时,可根据package.json导入。

项目命令行:  npm  install 

执行该命令会自行下载。

全局安装

如果有一些js是你多个项目都需要的,这不需要每个项目都下载,因为它提供了一个全局安装功能。

查看npm的系统根目录 :   npm root -g

全局安装命令(如安装jquery):npm  install  jquery   -g

七、切换NPM镜像

切换镜像来源,可以提高下载速度

这里需要下载nrm,命令行输入

npm install nrm -g

得到结果

+ nrm@1.2.1
added 319 packages from 151 contributors in 88.367s

这里值得注意的是,为了系统的稳定性考虑,每次执行完 npm install 之后会对应生成 package-lock 文件,用以记录当前状态下实际安装的各个 npm package 的具体来源跟版本号,相当于是提供了一个参考,在出现版本兼容性问题的时候,就可以参考这个文件来修改版本号即可。

输入命令:查看镜像目录

nrm ls

结果:(*表示当前使用的镜像)

(node:3180) ExperimentalWarning: The fs.promises API is experimental

npm -------- https://registry.npmjs.org/
  yarn ------- https://registry.yarnpkg.com/
  cnpm ------- http://r.cnpmjs.org/
* taobao ----- https://registry.npm.taobao.org/
  nj --------- https://registry.nodejitsu.com/
  npmMirror -- https://skimdb.npmjs.com/registry/
  edunpm ----- http://registry.enpmjs.org/

这里的命令可能会报错,不要慌,解决方案:

输入命令 npm root -g,查看npm 的系统根目录。打开该目录,并打开其中的nrm文件夹。

C:\Users\16221\AppData\Roaming\npm\node_modules\nrm

打开文件cli.js,将大概在第17行的代码注释掉,如下方代码

//const NRMRC = path.join(process.env.HOME, '.nrmrc');

该行代码下方新增一条代码,如下方代码

const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');

保存,再次执行命令   nrm ls

如果还报错:

C:/> nrm ls
nrm : 无法加载文件 C:\Users\yxzheng\AppData\Roaming\npm\nrm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https
:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ nrm ls
+ ~~~+ CategoryInfo          : SecurityError: (:) [],PSSecurityException+ FullyQualifiedErrorId : UnauthorizedAccess

右键开始菜单,打开powershell(管理员),输入如下命令:

set-ExecutionPolicy RemoteSigned

get-ExecutionPolicy

然后再次测试 nrm ls

切换淘宝镜像

nrm use taobao

设置淘宝镜像
npm config set registry https://registry.npm.taobao.org

成功。

另一种方式是使用cnpm命令。

输入如下命令,安装cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

得到如下结果,说明安装成功

+ cnpm@7.0.0
added 708 packages from 969 contributors in 22.698s

输入cnpm -v  可查看版本

cnpm@7.0.0 (C:\Users\16221\AppData\Roaming\npm\node_modules\cnpm\lib\parse_argv.js)
npm@6.14.14 (C:\Users\16221\AppData\Roaming\npm\node_modules\cnpm\node_modules\npm\lib\npm.js)
node@10.15.3 (E:\project_tool\Node.js\node.exe)
npminstall@5.0.1 (C:\Users\16221\AppData\Roaming\npm\node_modules\cnpm\node_modules\npminstall\lib\index.js)
prefix=C:\Users\16221\AppData\Roaming\npm
win32 x64 10.0.19042
registry=https://registry.nlark.com

cnpm 只有在下载的时候才会常用,语法和npm 一样,只是npm改为cnpm而已,一般操作用npm

Node.js入门(一)相关推荐

  1. node.js入门 - 9.api:http

    node一个重要任务是用来创建web服务,接下来我们就学习与此相关的一个重要的api -- http.我们使用http.createServer()创建一个http服务的实例,用来处理来自客户的请求. ...

  2. 《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记

    最近想尝试一下在IBM Bluemix上使用Node.js创建Web应用程序,所以需要在本地搭建Node.js Web的开发测试环境. 这里讲的是Windows下的搭建方法,使用CentOS 的小伙伴 ...

  3. js读取http chunk流_极简 Node.js入门 教程双工流

    点击上方蓝字关注我们 小编提示: 本文是由 ICBU 的谦行小哥哥出品,我们会持续发出极简 Node.js入门 教程,敬请期待哦,文中有比较多的演示代码建议横屏阅读 双工流就是同时实现了 Readab ...

  4. Node.js 入门知识点总结

    Noed.js 快速入门 前言 node.js 入门 环境配置 hello node.js node.js 获取参数 node.js 模块系统 node.js 路由 node.js 文件操作 使用 n ...

  5. node.js入门 - 7.异常处理与多进程开发

    node.js入门 - 7.异常处理与多进程开发 参考文章: (1)node.js入门 - 7.异常处理与多进程开发 (2)https://www.cnblogs.com/softlover/arch ...

  6. node.js 入门 (1)

    node.js 入门 (1) 一.node.js 是什么? 二.node.js 有那些特点? 三.node.js 安装种配置 安装方式 1:安装单个 node 版本(不推荐) 安装方式 2:安装多个 ...

  7. Node.js 入门教程 23 使用 npm 的语义版本控制 24 卸载 npm 软件包 25 npm 全局或本地的软件包

    Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录 Node.js 入门教程 23 使用 npm 的语义版本控制 24 ...

  8. Node.js 入门手册:那些最流行的 Web 开发框架

    这篇文章与大家分享最流行的 Node.js Web 开发框架.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编 ...

  9. Node.js 入门教程 6 V8 JavaScript 引擎

    Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录 Node.js 入门教程 6 V8 JavaScript 引擎 6 ...

  10. 让我们一起学习《Node.js入门》一书吧!

    Node.js入门 读完本书之后,你将完成一个完整的web应用,该应用允许用户浏览页面以及上传文件. 里面对一些知识的讲解,让你略窥Node.js的门径.最好一段代码一段代码的写下来,我的习惯是手里拿 ...

最新文章

  1. US News 2021年世界大学排行榜发布,清华大学首登亚洲第一
  2. php admin配置my sql,安装Mysqlphpadmin
  3. python写了代码_Python写代码的用法建议
  4. 再议《反驳 吕震宇的“小议数据库主键选取策略(原创)” 》
  5. ux的重要性_颜色在UX中的重要性
  6. java list 对象 json字符串_Java中Json字符串直接转换为对象的方法(包括多层List集合)...
  7. java if 局部变量_java – 为什么局部变量在if-else构造中启动而在if-else-if构造中不启动?...
  8. 使用CImage类将RGB图像转化为灰度图像
  9. udp java 实例_udp例子,javaudp简单实例分享
  10. n行杨辉三角 Python
  11. C#使用DirectoryEntry类操作Windows帐户
  12. 水箱建模最小二乘法_消防水池、消防水箱
  13. OSChina 周五乱弹 —— 睡觉都枕着小姐姐
  14. Redis 列表(List)方法使用详解
  15. Java学习之JavaFX安装
  16. 【数据结构与算法】-6.1图的基本概念和术语
  17. 一个工科研究生毕业后的职业规划
  18. 《机器学习》(周志华)线性回归
  19. 大数据说:原来“首堵”不是北京!
  20. 男朋友是一名程序员,他都好久没有交作业了

热门文章

  1. WM6.5系统和软件的注册表修改以及优化
  2. 【第1170期】如何看待员工跳槽
  3. 听说RSI准的难以置信?
  4. fetion机器人安装
  5. python画罗小黑_Python3+requests库爬取豆瓣《罗小黑战记》评论
  6. [影视推荐]黑客题材美剧—网络末日战
  7. 使用vlc软件如何打开sdp文件_Vlc初探 制作视频播放器(含视频)
  8. matlab 求解体积,matlab如何计算多面体体积
  9. unity重定向_Unity 骨骼动画的运行时重定向
  10. 谈谈区块链:深入理解软硬分叉