Node.js入门(一)
一、安装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入门(一)相关推荐
- node.js入门 - 9.api:http
node一个重要任务是用来创建web服务,接下来我们就学习与此相关的一个重要的api -- http.我们使用http.createServer()创建一个http服务的实例,用来处理来自客户的请求. ...
- 《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记
最近想尝试一下在IBM Bluemix上使用Node.js创建Web应用程序,所以需要在本地搭建Node.js Web的开发测试环境. 这里讲的是Windows下的搭建方法,使用CentOS 的小伙伴 ...
- js读取http chunk流_极简 Node.js入门 教程双工流
点击上方蓝字关注我们 小编提示: 本文是由 ICBU 的谦行小哥哥出品,我们会持续发出极简 Node.js入门 教程,敬请期待哦,文中有比较多的演示代码建议横屏阅读 双工流就是同时实现了 Readab ...
- Node.js 入门知识点总结
Noed.js 快速入门 前言 node.js 入门 环境配置 hello node.js node.js 获取参数 node.js 模块系统 node.js 路由 node.js 文件操作 使用 n ...
- node.js入门 - 7.异常处理与多进程开发
node.js入门 - 7.异常处理与多进程开发 参考文章: (1)node.js入门 - 7.异常处理与多进程开发 (2)https://www.cnblogs.com/softlover/arch ...
- node.js 入门 (1)
node.js 入门 (1) 一.node.js 是什么? 二.node.js 有那些特点? 三.node.js 安装种配置 安装方式 1:安装单个 node 版本(不推荐) 安装方式 2:安装多个 ...
- Node.js 入门教程 23 使用 npm 的语义版本控制 24 卸载 npm 软件包 25 npm 全局或本地的软件包
Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录 Node.js 入门教程 23 使用 npm 的语义版本控制 24 ...
- Node.js 入门手册:那些最流行的 Web 开发框架
这篇文章与大家分享最流行的 Node.js Web 开发框架.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编 ...
- Node.js 入门教程 6 V8 JavaScript 引擎
Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录 Node.js 入门教程 6 V8 JavaScript 引擎 6 ...
- 让我们一起学习《Node.js入门》一书吧!
Node.js入门 读完本书之后,你将完成一个完整的web应用,该应用允许用户浏览页面以及上传文件. 里面对一些知识的讲解,让你略窥Node.js的门径.最好一段代码一段代码的写下来,我的习惯是手里拿 ...
最新文章
- US News 2021年世界大学排行榜发布,清华大学首登亚洲第一
- php admin配置my sql,安装Mysqlphpadmin
- python写了代码_Python写代码的用法建议
- 再议《反驳 吕震宇的“小议数据库主键选取策略(原创)” 》
- ux的重要性_颜色在UX中的重要性
- java list 对象 json字符串_Java中Json字符串直接转换为对象的方法(包括多层List集合)...
- java if 局部变量_java – 为什么局部变量在if-else构造中启动而在if-else-if构造中不启动?...
- 使用CImage类将RGB图像转化为灰度图像
- udp java 实例_udp例子,javaudp简单实例分享
- n行杨辉三角 Python
- C#使用DirectoryEntry类操作Windows帐户
- 水箱建模最小二乘法_消防水池、消防水箱
- OSChina 周五乱弹 —— 睡觉都枕着小姐姐
- Redis 列表(List)方法使用详解
- Java学习之JavaFX安装
- 【数据结构与算法】-6.1图的基本概念和术语
- 一个工科研究生毕业后的职业规划
- 《机器学习》(周志华)线性回归
- 大数据说:原来“首堵”不是北京!
- 男朋友是一名程序员,他都好久没有交作业了