node 安装及使用路由、fs模块 | 8月更文挑战

1,408 阅读5分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

一、node 安装

node 开门注:

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时。

简单总结为:

  1. nodejs是一个运行在chrome v8引擎上的js的运行环境。
  2. nodejs的三大特征:单线程,事件驱动(回调函数),非阻塞I/O (input,output,文件的读写)
  3. nodejs集合了npm包管理系统。

node.js 下载

nodejs.org/zh-cn/downl…

windows 安装.msi

也就是说,我们进行下载的时候,选择的是msi安装包而不是zip包的原因就是:msi安装包已经帮我们配置好了系统的环境变量,更加方便使用。

mac 安装.pkg

image.png

安装完成后 在 终端中 使用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窗口的常见指令

  1. cls 清屏
  2. cd 改变文件夹
  3. cd .. 跳出文件夹
  4. cd ../.. 返回两次文件夹
  5. dir 查看当前文件夹内容
  6. touch a.js 创建文件
  7. 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

image.png

注意:

1、程序在运行的时候不能关闭 cmd窗口,cmd关闭 程序自动关闭

2、如果js输出有修改,这需要重启nodejs 服务,在cmd窗口 按住 ctrl+c 打断服务,再重新 输入 node a.js 挂起服务

3、输出更多可以用res.write("你好,哎前段<br/>");但是结尾必须有res.end(),来结束访问;

Node.js执行时间

image.png

nodejs的架构

程序

image.png 引用内置模块,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);//端口

image.png

3.3 Node js 没有根目录

  • apache 是用根目录中的文件的层次来决定url的;
  • node 是用程序来决定URL的;
  • node丝毫不看任何文件和文件夹层次;
  • 程序包办了一切,决定了你输入什么网址,能看见什么文件;
  • node.js 很简单,很单薄,apache

3.4 顶层路由设计

让我们乱输入URL地址试一试:

我们发现:无论如何输入路由地址都会访问到我们的输出。

image.png

什么叫做顶层路由?

  • “顶层” nodejs负责的是 最原始最底层的设计

  • “路由” 用户输入什么网址,展示什么页面

image.png

四、简单认识fs模块---读文件模块

是异步语句,可以用

什么是同步和异步?

讨论同步还是异步,必须有一个 非CPU处理的耗时事件。比如磁盘读写,数据库查询等等。

有一些耗时间,比如寻找1到10000的水仙花数,是挺耗时的,但是是cpu负责的

面对非cpu处理的耗时事件,此时cpu有两个态度:

同步:cpu停止计算,死等这个耗时事件结束,然后继续执行后面的语句。

异步:cpu继续执行后面的语句,当这个耗时事件结束之后,通过“回调函数”来返回结果

同步函数有等号接收:

var data = fs.readFileSync("./test.txt");

异步函数没有等号,而是回调函数

fs.readFile("./test.txt",function(err,data){})

image.png

var fs = require("fs");//引用内置的fs模块
    fs.readFile("./test.txt",function(err,data) {
    console.log(data.toString());//data 是二进制的,所以要通过toString() 方法转换成字符串
})