这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
一、node 安装
node 开门注:
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时。
简单总结为:
- nodejs是一个运行在chrome v8引擎上的js的运行环境。
- nodejs的三大特征:单线程,事件驱动(回调函数),非阻塞I/O (input,output,文件的读写)
- nodejs集合了npm包管理系统。
node.js 下载
windows 安装.msi
也就是说,我们进行下载的时候,选择的是msi安装包而不是zip包的原因就是:msi安装包已经帮我们配置好了系统的环境变量,更加方便使用。
mac 安装.pkg
安装完成后 在 终端中 使用dos 命令 查看
node -v
NodeJS的工具反而火了。原因是4点:
1)全,npm上随便搜索
2)易用,直接npm install -g安装一下,然后就能用
3)高度智能,一条命令帮你做很多事情
4)所有的工具都是用js写的,而js是前端最熟悉的语言
二、运行谁就node谁,但是要注意盘符路径
Node js 没有根目录
2.1 JavaScript的运行需要宿主环境,nodejs是全新的宿主环境
for(var i = 0 , sum = 0; i<=100; i++){
sum++;
}
console.log(sum)
2.2 CMD窗口的常见指令
- cls 清屏
- cd 改变文件夹
- cd .. 跳出文件夹
- cd ../.. 返回两次文件夹
- dir 查看当前文件夹内容
- touch a.js 创建文件
- ipconfig 或者 ipconfig /all 查看ip地址 或 详细信息
系统的环境变量,使得我们可以在CMD中的任何盘符使用node 命令:
三、开发HTTP服务器
3.1 nodejs内置模块
nodejs中内置了很多模块,其中http模块的功能非常强大,可以开发服务器,来写一个小案例。
示例:新建一个a.js 文件
var http = require("http");//require 引入模块,
var server = http.createServer(function(req,res){
res.setHeader("content-type","text/html;charset=utf-8");// 设置编码格式
// res.write("你好,哎前段<br/>");
// res.write("你好,哎前段<br/>");
res.end("hello world");//在页面呈递内容,并结束本次访问,res.end() 不能少
});
server.listen(3000);//端口
在js文件所在文件夹内 按住 shift 右击,选择 在此处打开命令窗口,输入 node a.js 回车,可以看到光标 挂起,然后在浏览器里 输入ip:3000,可以看到输出的 hello world
1、require 是引入模块,以上案例相当于调用了内置 http 模块
2、http.createServer 可以创建服务器,req和res 分别代表 输入和输出
3、res.end() 就是在页面上呈递内容,并结束这次访问
4、server.listen(3000);nodejs 监听了 本机的3000端口,一旦有人访问本机ip且端口3000的,就可以看到这段 输出
在js文件所在文件夹内 按住 shift 右击,选择 在此处打开命令窗口,输入 node a.js 回车,可以看到光标 挂起,然后在浏览器里 输入ip:3000,可以看到输出的 hello world
注意:
1、程序在运行的时候不能关闭 cmd窗口,cmd关闭 程序自动关闭
2、如果js输出有修改,这需要重启nodejs 服务,在cmd窗口 按住 ctrl+c 打断服务,再重新 输入 node a.js 挂起服务
3、输出更多可以用res.write("你好,哎前段<br/>");但是结尾必须有res.end(),来结束访问;
Node.js执行时间
nodejs的架构
程序
引用内置模块,nodejs内置了很多模块,模块就是一些功能的封装。require就是英语“引用”的意思。
var http = require("http");//引用内置模块
这里就直接干引用,文件夹中不需要提供什么http 文件,就是“凭空引用”,表示我要用你的功能。
http这个东西,现在有一个能力,就是创建服务器
var server = http.createServer(function(req,res){})
创建服务器里面要写一个函数,表示当有用户访问的时候做的事情,
req表示请求,res表示响应。req.url 表示用户输入的网址,res.end()表示返回
req的应用
var server = http.createServer(function(req,res){
res.setHeader("content-type","text/html;charset=utf-8");// 设置编码格式 支持中文
if (req.url == "/") {
res.write("<h2>我是首页</h2>")
} else if(req.url == '/music') {
res.write("我是音乐")
}else if(req.url == '/sport'){
res.write("我是体育")
}
res.end("hello world");//在页面呈递内容,并结束本次访问,res.end() 不能少
});
server.listen(3000);//端口
http://192.168.1.143:3000/sport
3.2 使用中文
nodejs的http请求是默认不支持中文字符集的。
var server = http.createServer(function(req,res){
res.setHeader("content-type","text/html;charset=utf-8");// 设置编码格式 支持中文
res.end("hello world");//在页面呈递内容,并结束本次访问,res.end() 不能少
});
server.listen(3000);//端口
3.3 Node js 没有根目录
- apache 是用根目录中的文件的层次来决定url的;
- node 是用程序来决定URL的;
- node丝毫不看任何文件和文件夹层次;
- 程序包办了一切,决定了你输入什么网址,能看见什么文件;
- node.js 很简单,很单薄,apache
3.4 顶层路由设计
让我们乱输入URL地址试一试:
我们发现:无论如何输入路由地址都会访问到我们的输出。
什么叫做顶层路由?
-
“顶层” nodejs负责的是 最原始最底层的设计
-
“路由” 用户输入什么网址,展示什么页面
四、简单认识fs模块---读文件模块
是异步语句,可以用
什么是同步和异步?
讨论同步还是异步,必须有一个 非CPU处理的耗时事件。比如磁盘读写,数据库查询等等。
有一些耗时间,比如寻找1到10000的水仙花数,是挺耗时的,但是是cpu负责的
面对非cpu处理的耗时事件,此时cpu有两个态度:
同步:cpu停止计算,死等这个耗时事件结束,然后继续执行后面的语句。
异步:cpu继续执行后面的语句,当这个耗时事件结束之后,通过“回调函数”来返回结果
同步函数有等号接收:
var data = fs.readFileSync("./test.txt");
异步函数没有等号,而是回调函数
fs.readFile("./test.txt",function(err,data){})
var fs = require("fs");//引用内置的fs模块
fs.readFile("./test.txt",function(err,data) {
console.log(data.toString());//data 是二进制的,所以要通过toString() 方法转换成字符串
})