nodejs概述,命令行系统模块搭建服务器乱码


  • 什么是静态网站,什么是动态网站
  • fs模块进行文件读写的方法
  • http模块创建Web服务器的流程

1. Nodejs概述

1.1 Nodejs介绍

  • Nodejs是一个基于Chrome V8引擎的ECMAScript运行时环境

  • Nodejs可以执行js文件(有了Nodejs之后,js文件就能运行在服务器端了)

  • Nodejs提供了大量的工具(API),能够让我们完成文件读写、Web服务器创建等功能

  1. 创建Web服务器

  2. 准备页面所需的数据并显示页面

1.2 安装Nodejs

官网: https://Nodejs.org/en/

中文网:http://Nodejs.cn/

LTS: 长期稳定版。 实际项目开发建议使用长期稳定版

Current: 最新版。最新版包含了一些新功能,如果想学习最新的功能,则可以使用该版本。但是,最新版可能会有一些未知的bug

  1. 双击安装文件开始安装
  1. 傻瓜式安装,一路 'next' 即可

注意: 安装在英文路径下; 建议安装位置和老师一样

  1. 测试

在桌面上按住 shift 键 , 点击鼠标右键,选择 '在此处打开命令窗口'

进入黑窗口后输入: Nodejs -v

能够看到Nodejs版本号即为成功

1.3 Nodejs和浏览器中js的区别

浏览器中js组成: ES核心 + DOM + BOM

Nodejs中js组成: ES核心 + 全局成员 + 模块系统(系统模块、第三方模块、自定义模块)

全局成员: setTimeout、setInterval、console.log() 等。

注意:这几个名称和功能虽然和浏览器中的一样,但是是Nodejs自己实现的,与浏览器无关

1.4 程序体验

找到文件所在目录, 按着 shift键,同时按下鼠标右键,打开cmd,然后运行 node 01-node.js能够看到如下结果

2. 命令行和常用命令

2.1 命令行介绍

  • windows未发布之前,人们都是用DOS(磁盘操作系统)来操作计算机。
  • DOS系统内置了很多命令(例如:cd、dir等),我们可以通过调用不同的命令来操作计算机。
  • windows发布之后保留了命令行操作模式,内置了两种命令行: Cmd 和 PowerShell,我们可以使用命令行来操作计算机。 win 7默认Cmd, win 10 默认 PowerShell

Cmd:

2.2 打开命令行

方式一: 开始中输入 cmd 或者 PowerShell

方式二: 运行中输入 cmd 或者 PowerShell

方式三(推荐方式): 按住 shift,点击鼠标右键,再选择 '在此处打开命令窗口'

2.3 常用命令

  • cd: 切换目录
  • dir:查看目录下所有文件和目录
  • cls:清屏
  • exit:退出

cd 命令

命令 含义
cd \ 切换到根目录
cd . 保持在当前目录不变
cd .. 切换到上级目录
cd [目录] 切换到指定目录

dir命令

命令 含义
dir 查看当前目录下所有文件和目录
dir [路径] 查看指定目录下所有文件和目录

2.4 小技巧

  • 自动补全: 使用 tab键可以补充完没有敲完的命令
  • 历史命令: 按 ↑ 或者 ↓ 可以找到以前使用过的命令

3. Nodejs系统模块

3.1 系统模块介绍

  • 系统模块: 随着Nodejs一起安装,并由官方进行维护的模块。
    • 常用的系统模块: fs、http、url、path等
  • 一个模块中包含了很多方法和属性,可以帮助我们实现不同的功能

3.2 fs - 文件系统模块

​ 专门用来操作文件和目录。能够进行文件创建/删除,读取文件,获取文件详情等操作

3.3 文件读取 --- readFile

fs.readFile(var1, var2, var3);
参数1: 要读取的文件路径 --- 相对路径和绝对路径均可,推荐使用绝对路径
参数2: 配置项,主要用来配置字符集。可选参数。
      如果不设置该参数,文件内容会以二进制形式返回
参数3: 读取完成后触发的回调函数,有两个参数 --- err 和 result
     读取成功:
         err: null
         result: 文件内容,如果不设置参数2,则返回二进制数据。可以使用 toString() 方法将二进制数据
                 转为正常字符串
     读取失败:
         err: 错误对象
         result: undefined

参考: 01-readFile.js

3.4 文件写入 --- writeFile

//向指定文件中写入字符串(覆盖写入), 如果没有该文件则尝试创建该文件

fs.writeFile(var1, var2, var3, var4);
参数1: 要写入的文件路径 --- 相对路径和绝对路径均可,推荐使用绝对路径
参数2: 要写入文件的字符串
参数3: 配置项,设置写入的字符集,默认utf-8
参数4: 写入完成后触发的回调函数,有一个参数 --- err (错误对象)

参考: 02-writefile.js

3.5 文件追加 --- appendFile

//向指定文件中写入字符串(追加写入), 如果没有该文件则尝试创建该文件

fs.appendFile(var1, var2, var3, var4);
参数1: 要写入的文件路径 --- 相对路径和绝对路径均可,推荐使用绝对路径
参数2: 要写入文件的字符串
参数3: 配置项,设置写入的字符集,默认utf-8
参数4: 写入完成后触发的回调函数,有一个参数 --- err (错误对象)

参考: 03-appendfile.js

3.6 遍历目录 --- readdir

//遍历目录,获取目录下所有的文件及子目录的名称

fs.readdir(var1, var2, var3);
参数1: 要遍历的目录
参数2: 字符集, 可选参数,默认为utf-8
参数3: 遍历完成后触发的回调函数,有两个参数 --- err 和 files
    err: 错误对象
    files: 文件和子目录名,数组

参考: 04-readdir.js

4. Node创建Web服务器

4.1 请求-处理-响应

1548650391182.png

4.2 HTTP模块介绍

  • http是一个系统模块,让我们能够通过简单的流程创建一个Web服务器
  • Apache是一个成品服务器,安装好之后就有了Web服务器的所有功能; 使用http模块创建的服务器时,服务器能干什么取决于我们如何定义服务器的功能

4.3 使用http模块搭建Web服务器

创建Web服务器4步骤:

  1. 加载/导入/引入 http 模块

  2. 创建服务器对象

  3. 开启服务器

  4. 监听服务器请求并进行处理

//1. 加载/导入 http 模块
const http = require('http');

//2. 创建服务器对象
const server = http.createServer();

//3. 开启服务器
server.listen(3000, () => {
    console.log('Server is running...');
});

//4. 监听浏览器请求并进行处理
//on:该方法用来监听事件
//参数1: 事件类型, request代表浏览器请求事件
//参数2: 当监听到浏览器请求后触发的回调函数,该函数中有两个参数 req和res
//    req(request): 请求对象
//    res(response): 响应对象
server.on('request', (req, res) => {
    // end方法能够将数据返回给浏览器,浏览器会显示该字符串
    res.end('Hello Nodejs');
});

参考: 01-http.js

4.4 不同URL显示不同内容

核心:req(请求对象)中有url属性,该属性中保存了当前请求的url地址

注意: url属性中保存的地址是没有 协议、IP、端口号,并且以 / 开头的地址

示例:

http://127.0.0.1:3000 ===> /

http://127.0.0.1:3000/index.html ===> /index.html

http://127.0.0.1:3000/admin/login.html ===> /admin/login.html

http://127.0.0.1:3000/goods/detail.html ===> /goods/detail.html

http://127.0.0.1:3000/admin/index ===> /admin/index

4.5 解决中文乱码问题

核心:使用 res(响应对象)中的 setHeader方法

res.setHeader('content-type', 'text/html;charset=utf-8');

参考: 03-http.js

4.6 不同url显示不同html页面

核心: fs.readFile 读取html页面内容,再将文件内容通过res.end方法返回给浏览器

4.7 静态资源加载

运行原理:


2.png

加载静态资源:


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

推荐阅读更多精彩内容