一、NodeJS基本介绍
1、NodeJS是为了开发高性能的服务器而诞生的一种技术
2、是运行在服务端的 JavaScript,基于V8(谷歌浏览器的版本)进行运行
3、使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效
什么是nodejs?
1.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 v8解析js是最快的
2.nodejs是让js运行在服务器端
3.nodejs里面的API大多数都是异步
二、前端学习node的意义
1.1 开发沟通:开发时更容易理解后端实现,降低交流成本
1.2了解浏览器端和服务器端的交互过程 可以缩短开发周期
1.3出现bug 可以快速定位是前端问题还是后端问题
2.1后端开发:想写些自己感兴趣的项目时,可以自己独立完成,即使没有后端支持,且成本特别低。
2.2 nodejs和其它后端语言拥有一样的功能 可以做数据库的增删改善 爬虫 读写文件…
3、 中间层开发:为了进一步的前后端分离,提高性能,使用nodejs做中间层是一个非常好的实践(由于nodejs具有异步io的特点)
三、使用node的方式
1、 在node交互模式下运行(类似于命令窗口),这种方式类似于浏览器控制台,一般是用于运行单独的代码段。
2、 单独创建一个node文件,其实就是一个不包含bom与dom的js文件,然后使用node 文件名.js来运行,当然你也可以不给js后缀,这种方式一般是用于运行一个独 立的nodejs文件
3.执行方式
3.1打开命令框(CMD)
3.2.输入 node 回车
3.3.输入js代码 按回车执行
3.4.退出node环境 使用后ctrl+c(按两次)
使用node.js读取
// 导入模块 require("模块名") 模块名是nodejs内部规定死的 不能动
// 左边保存的变量可以修改 但是通常情况下和模块名保持一致
const fs = require('fs');
// 参数1 : 需要被读取的文件的路径
// 参数2 : 可选参数 我们这里给的是编码格式
// 参数3 : 回调函数 里面有连个参数 err 表示读取失败时返回的信息 data是读取到的文件信息
fs.readFile("./novels/01.txt","utf-8", (err, data) => {
// console.log(err);
// console.log(data);
if(!err) {
console.log(data);
} else {
console.log("文件读取失败");
}
})
console.log("底部的代码");
// nodejs里面 如果有sync结尾的方法都是同步的方法
// 同步方法用得并不多
var novel = fs.readFileSync("./novels/01.txt", "utf-8");
console.log(novel);
console.log("底部的代码");
使用node.js写入
// 导入fs模块
const fs = require("fs");
// 参数1 : 存入信息或者数据的文件路径
// 参数2 : 需要写入的数据
// 参数3 : 回调函数
fs.writeFile("./novels/03.txt", "鹅鹅鹅,曲项向天歌,白毛浮绿水,红掌拨清波", err => {
// console.log(err);
if(!err) {
console.log('写入成功');
} else {
console.log("写入失败");
}
})
console.log("底部的代码");
http请求获取文件
//导入文件模块
const fs = require("fs");
//导入http模块
const http = require("http");
//创建http服务
const server = http.createServer((request,response) =>{
//1.设置响应头 服务器为了告诉浏览器 我返回给你的数据 你用utf-8来解析
response.setHeader("content-type","text/html;charset=utf-8");
console.log(request.url);
//请求路径
let reqUrl = request.url;
if(reqUrl === "/index.html")
{
fs.readFile("./www/index.html","utf-8",(err,data) => {
response.end(data);
})
}else if(reqUrl === "/index.css")
{
response.setHeader("content-type","text/css;charset=utf-8");
fs.readFile("./www/index.css",(err,data) => {
response.end(data);
})
}
// response.end("刚好遇见你");
})
//开启服务器
server.listen("80",() => {
console.log("start");
})
node.js模块问题以及模块路径
node.js模块问题
//导入文件模块
const fs = require("fs");
fs.readFile(__dirname + "\\www\\01.txt","utf-8",(err,data) => {
console.log(data);
})
console.log(__dirname + "\\www\\01.txt");
console.log(__dirname);
//nodejs里面的相对路径 是相对于当前运行node命令的终端所处的相对路径
//为了保证在任何地方打开终端 都可以运行 那么我们的路径使用绝对路径
//问题: 万一文件夹存在其他地方 绝对路径也不可靠 解决办法: __dirname
//__dirname 是当前文件所在的文件的绝对路径
//__filname 是当前文件的绝对路径
node.js模块路径
//导入文件模块
const fs = require("fs");
const path = require("path");
const pathName = path.join("name","info","assets","index.html");
console.log(pathName);
//在使用到路径的地方 使用绝对路径
const txtPath = path.join(__dirname,"www","01.txt");
console.log(txtPath);
//读取文件
fs.readFile(txtPath,"utf-8",(err,data) => {
if(!err)
{
console.log(data);
}else{
console.log(err);
}
})
模拟web获取页面信息
//导入文件模块
const http = require("http");
const fs = require("fs");
const path = require("path");
//创建http服务
const server = http.createServer((request,response) =>{
const reqUrl = request.url;
if(reqUrl === "/index.html")
{
//读取index.html页面的内容
fs.readFile(path.join(__dirname,"www",reqUrl),(err,data) => {
if(!err)
{
response.end(data);
}else{
response.end(`404 Not Found ${reqUrl} was not found on this server`)
}
})
}
})
//开启服务器
server.listen("4399",() => {
console.log("start");
})