nodejs

时间:2021-02-22 23:27:03   收藏:0   阅读:42

nodejs的简介

nodejs是一个软件,这个软件本质是浏览器内核中的js引擎 - 谷歌浏览器中的js引擎 v8
js引擎是用来解析js代码的,浏览器中之所以能运行js代码,都是这个js引擎可以解析js代码
nodejs这个软件其实就提供了一个js代码脱离浏览器运行的环境,有了nodejs这个软件以后,写的js代码不用依赖html和浏览器就能运行了
既然脱离了浏览器和html,nodejs代码中,就不能操作浏览器和文档了,nodejs的代码中没有window和document

nodejs软件安装好之后,没有快捷方式,不需要双击运行这个软件,nodejs软件怎么运行?在命令行中使用命令来运行。
命令行中没有代码,只有命令。  

命令的学习

命令行的打开方式:

1.通过开始菜单,输入cmd
2.win+r打开运行,输入cmd,敲回车
3.可以在任意一个文件夹中,按住 shift键 + 鼠标右键 ----- 在此处打开命令窗口
4.在一个文件夹路径中输入cmd敲回车
5.借助vscode编辑器 - 在左侧的资源管理中,点击右键(快捷键:ctrl+`) --- 在终端中打开(点击关闭面板按钮不能彻底关闭,需要点击删除按钮)
注意事项:win7怎么打开都无所谓,win10对于权限要求比较高,建议大家使用开始菜单,使用管理员身份运行
 

切换盘符:要从一个根目录下进入到另一个根目录下的某个文件夹是进不去,需要先切换盘符

盘符名: 敲回车   eg:d: 
 

进入某个文件夹:

cd 目标文件夹的路径
 

回到上一级文件夹:

cd ..    eg:cd ..
           eg:cd ../xxx
 

查看当前文件夹下所有文件和文件夹列表:

dir
 

查看当前文件夹下所有的目录树:

tree

终止当前的命令:

ctrl + c
 
注意:在命令行中ctrl+c不是复制,ctrl+v也不是粘贴,复制和粘贴都需要点击鼠标右键

清屏:

cls

当前的网卡配置:

ipconfig

当前计算机的配置:

systeminfo

查看某个域名对应的ip地址:

ping 域名

创建文件夹:

md 文件夹名称

创建文件:

type nul> 文件名称

给文件中写入内容:

echo 内容>文件名称

文件重命名:

ren 旧的名字 新的名字
 
注意事项:在命令行中运行命令,可以使用 tab键 进行自动填充

快速输入以前运行过的命令,上下键表示上一个下一个命令

js中读取文件中的数据

 

const fs = require(‘fs‘); // 引入别的文件:require(被引入的文件路径)
fs其实是nodejs自己内部封装的一个文件,fs.js - nodejs运行的所有文件都是js文件,所以后缀可省略的,fs是系统提供的,所以不需要加具体的路径 —— 异步的读取文件
fs.readFile(‘./1.txt‘, ‘utf-8‘, (err, data) => {
     console.log(err);
     // 如果读取成功,err就是null,如果读取失败了,err就是一个错误信息
     if (err) throw err;
     // 读取文件中的数据,默认读取出来的是一个文件流(二进制的数据流) - 显示的时候,使用16进制来描述2进制的数据 - buffer
     console.log(data);
     // console.log(data.toString());
});
 console.log(11111111111111);

同步读取文件

var data = fs.readFileSync(‘./3.txt‘,‘utf-8‘)

console.log(data);

 

写入文件

const fs = require(‘fs‘) //用nodejs运行js前面都要加入

注意:nodejs、vue、 .... 在这些框架中,尽量使用es6的语法

const fs = require(‘fs‘)
// 如果文件不存在,会自动创建
// 覆盖写入
// 异步写入
fs.writeFile(‘3.txt‘,‘a‘,err=>{
    if(err){
        console.log("写入失败了,错误是:"+err);
        return;
    }
    console.log("写入成功");
})

console.log(2222222222);

 

同步写入

const fs = require(‘fs‘)
fs.writeFileSync(‘1.txt‘,‘aabbcc‘)
 console.log("写入成功");

 

自定义模板

nodejs系统内部不会把所有功能都给封装好,为了更加灵活的适用项目中的需求,需要自己定义模块

导出

在nodejs中,每个文件默认有一个隐藏的对象,叫module,这个对象的作用就是导出数据 - 有一个属性叫exports,开辟的这个空间用来导出数据 - 共享数据
module.exports = 对象
nodejs为了方便开发者导出数据,内部做了一个操作:const exports = module.exports
let obj = {
    name:"张三",
    age:12
}

let arr = [‘a‘,‘b‘,‘c‘];
// 导出数据
module.exports = {
    obj:obj,
    arr
}


// exports.obj = obj
// exports.arr = arr

// 将原来exports的内存地址给改了,导出的动能由module.exports提供 - 错误写法
// exports = {
//     obj,arr
// }

 

导入

require(自定义的路径)
导入自定义文件的时候,./是不能省略的,因为导入系统提供的文件的时候,是不需要路径
后缀可以省略
// 在这个文件中使用 8-导出.js 文件中定义的数据
// 导入 - require()

// 不能省略./
const o = require(‘./8-导出‘)
console.log(o);

总结:

因为系统不会提供所有功能,所以需要自定义功能文件
自定义的文件,不能随便使用,需要导出,别的文件才能使用
module.exports = {}
exports.键 = 值
别的文件需要导入才能使用:
require(文件路径) - ./不能省略
 

http服务器

 

// 导入内置的http模块
const http = require(‘http‘)
// 创建服务器
const server = http.createServer(function(request,response){
    // request - 当前这次请求
    // 请求有一个属性url - 获取请求的路径
    // console.log(request.url);
    let url = request.url;


    // response - 给客户端做响应的
    // 响应的end方法 - 响应数据的
    // response.end(‘ok‘)
    // 响应的setHeader方法,用来设置响应头
    // response.setHeader(‘content-type‘,‘text/html;charset=utf8‘)
    // 响应的writeHead方法,可以用来设置响应状态码、状态描述和响应头
    response.writeHead(201,‘request is ok‘,{
        ‘content-type‘:‘text/html;charset=utf8‘
    })
    // response.end(‘有客户端请求来了,这是我做的响应‘)

    // response.end(123456) // 错误写法,响应的数据必须是string或buffer不能是其他类型

    response.end(url)
})
// 监听端口 - 可以有第二个参数,是一个回调函数 - 端口监听好以后,执行的一个函数
server.listen(8848,()=>{
    console.log("服务器已经启动了,请访问:http://localhost:8848/");
})

 

服务器响应解析html、css和js案例

// 创建一个服务器,在响应的时候,根据请求的路径,来响应不同的内容

// 请求路径:/login - 响应login.html
// 请求路径:/index - 响应index.html
// 引入fs,准备读取文件
const fs = require(‘fs‘)
require(‘http‘).createServer((req,res)=>{
    // res.end(req.url)
    // 判断请求路径,响应不同的内容
    if(req.url === ‘/login‘){
        // 响应login.html文件
        // 读取login.html文件,响应出去
        let data = fs.readFileSync(‘./work/login.html‘) // buffer
        res.end(data)
    }else if(req.url === ‘/index‘){
        // 读取index.html 并响应出去
        let data = fs.readFileSync(‘./work/index.html‘)
        res.end(data)
    }else if(req.url === ‘/css/global.css‘){
        let data = fs.readFileSync(‘./work/css/global.css‘)
        res.end(data)
    }else if(req.url === ‘/css/index.css‘){
        let data = fs.readFileSync(‘./work/css/index.css‘)
        res.end(data)
    }else if(req.url.includes(‘img‘)){ // 判断请求路径中包含 img
        let data = fs.readFileSync(‘./work‘+req.url)
        res.end(data)
    }else if(req.url.includes(‘js‘)){
        let data = fs.readFileSync(‘./work‘+req.url)
        res.end(data)
    }else{
        res.end(‘ok‘)
    }
}).listen(9527)

简便写法

// 创建一个服务器,在响应的时候,根据请求的路径,来响应不同的内容

// 请求路径:/html/login.html - 响应login.html
// 请求路径:/html/index.html - 响应index.html
// 引入fs,准备读取文件
const fs = require(‘fs‘)
require(‘http‘).createServer((req,res)=>{
    // 响应html - 路径中要包含html才行
    
    if(req.url.includes(‘html‘)){
        // 读取文件的时候,路径中多了 /html - 去掉
        let path = req.url.replace(‘/html‘,‘‘)
        let data = fs.readFileSync(‘./work‘ + path)
        res.end(data)
    }else if(req.url.match(/\/img|\/js|\/css/)){ // /css、/js、/img 整体处理
        let data = fs.readFileSync(‘./work‘ + req.url)
        res.end(data)
    }else if(req.url.includes(‘/api‘)){ // 发送ajax都使用/api/xxxx

        res.end(‘login接口‘) // 响应数据
    }else{
        res.end(‘ok‘)
    }
}).listen(9527)

npm

1.利用nodejs内置的模块文件
2.自定义模块文件
3.第三方模块 - 别人写好的功能文件,我要使用 - 下载,然后导入使用
 
nodejs为了方便下载别人写好的文件,专门提供了一个下载工具 npm
npm下载工具是nodejs自带的一个工具,只要安装好nodejs吗,就有npm
测试npm是否存在,在命令行执行命令:npm -v 只要能得到版本号,就表示npm存在能用
 
只需要知道模块的名称就ok
npm能下载写什么?js的库、js的插件、js的框架 ....
下载命令:
npm install 模块名称 - 默认下载的是最新版本
简化命令:npm i 模块名称
下载指定版本: npm i 模块名称@版本号 (版本号:可以是一个大版本号,也可以是完整的带有小版本好的)
 
卸载命令:
npm uninstall 模块名称

项目细节注意:

项目上线,本来是需要将项目站点中所有的文件都上传到服务器才ok,但是node_modules文件夹,里面的文件层级比较深,琐碎的文件比较多 - 造成一个不好影响,文件在上传过程中,容易引起文件错误,导致上传失败,就会影响项目的运行
// npm提供了一个解决方案,原理:下载模块的时候,使用一个文件记录起来,等到上线的时候,不上传node_modules文件夹,上传记录的这个文件,然后到服务器中,再去根据记录号的模块,重新下载

// 记录模块的文件,是指定的:名字必须叫:package.json - 按照一定的规律存储
// 初始化命令:npm init - 生成指定package.json文件 - 这个命令一定要在下载模块之前执行
// 可以简化这个命令: npm init -y 不用输入了,所有的内容都使用默认的就好 - 这个命令不能在中文文件夹下执行
// 下载模块,他会把所有下载的这些模块都记录起来
// 将项目文件和这个文件上传到服务器 - 忽略node_modules
// 在服务器中执行安装所有记录好的模块:npm i
 

总结:

在上传项目的时候,不上传node_modules,文件层级深,多,容易造成文件错误,上传失败,项目无法正常运行
// npm init -y 初始化 - 生产了一个package.json的文件
// 下载模块 - 把下载过的模块都记录在这个文件中
// 项目做好了要上线,就把项目文件和package.json文件上传到服务器,在服务器中执行命令:npm i 就能把记录好的所有模块都下载好
 

nrm

// 管理下载地址的工具:nrm
// npm默认的下载地址在国外 - 很慢
// 需要将下载地址切换到国内
// nrm就是用来做这个操作
// 下载安装nrm这个工具:使用npm就能行
// npm i nrm --global - 全局安装(这个工具在计算机的任何一个地方都可以使用)
// 简写:npm i nrm -g
// 测试是否能用:nrm --version 有版本号就说明下载成功了,能用了
 
 

原文:https://www.cnblogs.com/mrxiachongyu/p/14432921.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!