node介绍

news2025/1/11 23:37:27

1.node是什么

Node是一个基于Chrome V8引擎的JS运行环境。

Node不是一个独立的语言、node不是JS框架。

Node是一个除了浏览器之外的、可以让JS运行的环境

Node.js是一个让JS运行在服务端的开发平台,是使用事件驱动,异步非阻塞I/O,单线程,跨平台的JS运行环境;

不是运行在浏览器上,而是运行在服务器上

2.为什么要学习node

A. 打开服务器的黑盒子

B. 企业需求

C. 大前端必备技能

D. 为了更好的学习前端框架

3.node能做什么

A. Web服务器(重点)

B. 命令行工具

C. 网络爬虫:是一种按照一定的规则,自动地抓取网站信息的程序

D. 桌面应用程序开发(VS Code)

4.node发展历史

https://blog.csdn.net/stpan22/article/details/104466554

5.下载安装

https://nodejs.org/zh-cn/download/

在安装过程中,尽量不改变路径

6.运行node

6.1 找到安装路径法

在这里插入图片描述
双击node.exe
在这里插入图片描述
可以直接写js代码

6.2 cmd法

A.win+r,输入cmd,输入node
在这里插入图片描述
B.运行指定文件
在这里插入图片描述
C.在对应路径下,输入cmd
在这里插入图片描述

6.3 REPL环境-集成终端

在这里插入图片描述

7.读取文件

7.1 读文件

稳当参考路径:http://nodejs.cn/api/fs.html#fsreadfilepath-options-callback

语法结构:

fs.read(fd[, options], callback)

说明:

A. fd:文件名或文件描述符

B. options:encoding 默认值null

C. callback:function

​ err:error

​ Data

异步地读取文件内容

var fs = require('fs')  --引入fs模块

fs.readFile('./file.txt', 'utf8', function (err, data) {
  console.log(err);
  console.log(data);
})

7.2 写文件

文档参考地址

语法结构:

fs.writeFile(file, data[, options], callback)
// 写入操作-先读取,再写入
var fs = require('fs')

fs.readFile('./file.txt', 'utf8', function (err, data) {
  data += "hello world~"
  console.log(data);
  // 再写入
  fs.writeFile('./file.txt', data, function (err) {
    if (!err) {
      console.log('写入成功!');
    }
  })
})

8.http请求–请求路由

// 引入http核心模块
var http = require('http');

// 创建一个服务
var server = http.createServer();

// req是谁请求,什么时候请求,res响应数据
server.on('request', function (req, res) {
  // 设置响应头信息,用于防止乱码,以下两句都可以防止乱码
  // 第一种方式
  res.setHeader('Content-Type', 'text/plain;charset=utf-8')
  // 第二种方式
  // res.writeHead(200, {
  //   'content-type':"text/html;charset=utf-8"
  // })
  res.write('测试'); // 写入流
  res.write('hhhhhhhhh'); // 写入流
  res.end(); //响应,只要不写end,文本都可以输出
})

// 创建监听:请求会被转化为二进制,输出也需要把二进制进行编译
// 启动监听,设置一个端口号,这个端口的取值返回0-65535
server.listen('9999');
console.log('服务器已启动,监听端口9999,请访问localhost:9999');

9.响应一个完整的html页面–请求html页面

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>响应一个完整的html页面</title>
</head>
<body>
  <div>响应一个完整的html页面</div>
  <h1>我是标题</h1>
  <b>我是b标签</b>
  <img src="./imgs/yuhang.jpg" alt="">
</body>
</html>

index.js

// 导入模块
var http = require('http');
var fs = require('fs');

var server = http.createServer(); // 创建一个服务

// 响应
server.on('request', function (req, res) {
  // 当出现乱码
  // res.setHeader('Content-Type','text/plain;charset=utf-8'); // 只能加载文本
  res.setHeader('Content-Type', 'text/html;charset=utf-8'); // 如果想要加载html需要把plain修改为html

  // res.write('加载一段话1'); // 如果只写 res.write(),那么会一直在运行,必须写上end,相对较麻烦
 
  // res.end('加载一段话2'); // 也可以直接写在res.end()里面

  // 可以直接在end里面编写,当直接写html标签是无法识别,需要修改setHeader
  // res.end('写在end<b>里面的</b>一段话'); // 再end里面可以写html代码,但是如果要写一段的html呢
  
  // 如果有很多html内容,或者是一个界面都需要渲染的话,就用下面的方式,用读取文件形式
  fs.readFile('./03index.html','utf8', function (err, data) {
    res.end(data)
  })
})

// 加载端口
server.listen(5656, function () {
  console.log('端口localhost:5656,已启动...');
})

10.响应一张图片或是静态资源–请求外部静态资源

index.js

// 导入模块
var http = require('http')
var fs = require('fs')

var server = http.createServer() // 创建一个服务

// 响应
server.on('request', function (req, res) {
  // 防止乱码
  res.setHeader('Content-Type', 'text/html;charset=utf-8')

  // 1.加载静态网页,直接这样读取,是不能识别图片和其他静态资源的,这个时候,request 有一个非常重要的属性 url
  // fs.readFile('./03index.html', 'utf8', function (err, data) {
  //   res.end(data)
  // })

  // 2.返回request的url属性
  // fs.readFile('./03index.html', 'utf8', function (err, data) {
  //   console.log(req.url,'request.url');
  //   res.end(data)
  // })
   
  // 3.综合绑定
  if (req.url == '/') { // 静态的html内容
    fs.readFile('03index.html', function (err, data) {
      res.end(data)
    })
  } else { // 其他静态外部资源
    // 注意,读取图片的时候,不能加字符集
    fs.readFile('.' + req.url, function (err, data) {
      res.end(data)
    })
  }
})

// 加载端口
server.listen(5656, function () {
  console.log('端口localhost:5656已启动......');
})

11.仿apache/iis服务器加载文件资源

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>仿服务器资源</title>
</head>

<body>
    <h1>Index Of</h1>
    <table border="1" width="600">
        <thead>
            <th>图片</th>
            <th>文件名称</th>
            <th>最后更改时间</th>
            <th>大小</th>
            <th>文件类型</th>
        </thead>
        <tbody id="tShow"></tbody>
    </table>
</body>
<script>
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            var data = JSON.parse(xhr.responseText);
            var content = '';
            for (var i = 0; i < data.length; i++) {
                content += "<tr>";
                if (data[i].type == "F") {
                    content += "<td><img src='./imgs/1.jpg' width='50' /></td>"
                } else {
                    content += "<td><img src='./imgs/2.jpg' width='50' /></td>"
                }
                content += "<td>" + data[i].uname + "</td>";
                content += "<td>" + data[i].mtime + "</td>";
                content += "<td>" + data[i].size + "</td>";
                content += "<td>" + (data[i].type == "F" ? "文件" : "文件夹") + "</td>";
                content += "</tr>";
            }
            document.querySelector('#tShow').innerHTML=content;
        }
    }
    xhr.open('get', './file_list');
    xhr.send();
</script>

</html>

index.js

var http = require('http');
var fs = require('fs');
var moment=require('moment');

var server = http.createServer();

//响应
server.on('request', function (request, response) {
    //防止乱码
    response.setHeader('Content-type', "text/html;charset=utf-8");

    //普通html文档
    if (request.url == '/') {
        fs.readFile('3.index.html', function (err, data) {
            response.end(data);
        })
    }
    else if (request.url == '/file_list') {
        fs.readdir('./', 'utf8', function (err, data) {
            //1.因为data返回的数据是数组,需要转化为json
            //response.end(JSON.stringify(data));//返回的这种数据,暂时不符合我们的要求
            //2.读取完名字后要获得其他属性,返回的形式[{uname,size,time,type},{},{}],要定义返回一个数组
            var data_arr = [];//数组里面存放的对象,一个文件就是一个对象
            var count = 0;//计数器
            for (var i = 0; i < data.length; i++) {
                data_arr[i] = {};
                (function (i) {
                    //获取其他属性
                    fs.stat(data[i], function (err1, data1) {
                        count++;
                        if (data1.isFile()) {
                            data_arr[i].type = "F";
                        } else {
                            data_arr[i].type = "FN";
                        }
                        data_arr[i].uname = data[i];
                        data_arr[i].size = data1.size;
                        data_arr[i].mtime = moment(data1.mtime).format('YYYY-MM-DD hh:mm:ss');

                        //判断什么时候返回
                        if(count==data.length){
                            response.end(JSON.stringify(data_arr));
                        }
                    })
                })(i)
            }
        })
    }
    else {//其他资源
        fs.readFile('.' + request.url, function (err, data) {
            response.end(data);
        })
    }
})

//端口
server.listen(1234, function (err, data) {
    console.log('端口1234正在启动.....');
});

在这里插入图片描述
上述代码注意闭包!

11.1 引用时间模块

npm install moment;–第三方模块

12.json数据

12.1 什么是JSON

概念:JSON的英文全称是JavaScript Object Notation,即”JavaScript对象表示法”。简单来讲,JSON就是JavaScript对象和数组的字符串表示法,它使用文本表示一个JS对象或数组的信息,因此JSON的本质是字符串

作用:JSON是一种轻量级的文本数据交换格式,在作用上类似于XML,专门用于存储和传输数据,但是JSON比XML更小、更快、更易解析。

现状:JSON是在2001年开始被推广和使用的数据格式,到现今为止,JSON已经称为了主力的数据交换格式。

12.2 JSON的两种结构

JSON就是用字符串来表示JS的对象和数组。所以,JSON中包含对象和数组两种结构,通过这两种结构的相互嵌套,可以表示各种复杂的数据结构

A.对象结构

对象结构在JSON中表示为{}括起来的内容。数据结构为{key:value,key:value…}的键值对结构。其中,key必须是使用英文的双引号包裹的字符串,value的数据类型可以是数字、字符串、布尔值、null、数组、对象6种类型

//这是一个对象
var obj = { a: 'hello', b: 'world' }

//这是一个json,本质是字符串
var json = '{"a":"hello","b":"world"}'

console.log(obj);
console.log(json);

B.数组结构

数组结构在JSON种表示为[]括起来的内容。数据结构为[“java”,”javascript”,30,true…]。数组种的数据的类型可以是数字、字符串、布尔值、null、数组、对象六种类型。

12.3 JSON语法注意事项

A. 属性名必须使用双引号包裹

B. 字符串类型的值必须使用双引号包裹

C. JSON中不允许使用单引号表示字符串

D. JSON中不能写注释

E. JSON的最外层必须是对象或数组格式

F. 不能使用undefined或函数作为JSON的值

JSON的作用:在计算机与网络之间存储和传输数据

JSON的本质:用字符串来表示JS对象数据或数组数据

12.4 json和js对象的互转

要实现从JSON字符串转化为JS对象,使用JSON.parse()方法:字符串->对象

var json='{"a":"hello","b":"world"}'
var obj=JSON.parse(json);
console.log(obj);

要实现从JS对象转化为JSON字符串,使用JSON.stringify()方法:对象->字符串

var temp=JSON.stringify(obj)
console.log(typeof(temp));

12.5 序列化和反序列化

把数据对象转化为字符串的过程,叫做序列化,例如:调用JSON.stringify()函数的操作,叫做JSON序列化

把字符串转化为数据对象的过程,叫做反序列化,例如:调用JSON.parse()函数的操作,叫做JSON反序列化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1401751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang leetcode28 找出字符串中第一个匹配项的下标 KMP算法详解

文章目录 找出字符串中第一个匹配项的下标 leetcode28 串的模式匹配问题暴力求解使用KMP模式匹配算法KMP算法简述 KMP算法的代码实现 找出字符串中第一个匹配项的下标 leetcode28 串的模式匹配问题 暴力求解 func strStr(haystack string, needle string) int { L : len(need…

HNU-数据挖掘-实验3-图深度学习

数据挖掘课程实验实验3 图深度学习 计科210X 甘晴void 202108010XXX 文章目录 数据挖掘课程实验<br>实验3 图深度学习实验背景实验要求数据集解析实验内容&#xff08;0&#xff09;基础知识&#xff1a;基于图的深度学习方法浅识&#xff1a;图卷积网络 (GCN)浅识&…

【Git不走弯路】(二)提交与分支的本质

1. 前言 提交与分支是Git中两个基本对象&#xff0c;对初学者而言需要花些时间理解。正如我们之前所说&#xff0c;计算机中很多新概念是新瓶装旧酒。计算机技术来源于需求&#xff0c;服务于需求&#xff0c;需求是计算机技术的出发点和落脚点。梳理清楚工程实践中&#xff0…

【征服redis15】分布式锁的功能与整体设计方案

目录 1. 分布式锁的概念 2.基于数据库做分布式锁 2.1 基于表主键唯一做分布式锁 2.2 基于表字段版本号做分布式锁 2.3 基于数据库排他锁做分布式锁 3.使用Redis做分布式锁 3.1 redis实现分布式锁的基本原理 3.2 问题一&#xff1a;增加超时机制&#xff0c;防止长期持有…

BP蓝图映射到C++笔记1

教程链接&#xff1a;示例1&#xff1a;CompleteQuest - 将蓝图转换为C (epicgames.com) 1.常用的引用需要记住&#xff0c;如图所示。 2.蓝图中可以调用C函数&#xff0c;也可以实现C函数 BlueprintImplementableEvent:C只创建&#xff0c;不实现&#xff0c;在蓝图中实现 B…

E/E架构升级是汽车智能化发展关键

E/E架构升级是汽车智能化发展的关键。传统汽车采用的分布式E/E架构因计算能力不足、通讯带宽不足、不便于软件升级等瓶颈&#xff0c;无法满足现阶段汽车发展的需求&#xff0c;E/E架构升级将助力智能汽车实现跨越式革新。汽车E/E架构升级主要体现在硬件架构升级、软件架构升级…

140:leaflet加载here地图(v2软件多种形式)

第140个 点击查看专栏目录 本示例介绍如何在vue+leaflet中添加HERE地图(v2版本的软件),并且含多种的表现形式。包括地图类型,文字标记的设置、语言的选择、PPI的设定。 v3版本和v2版本有很大的区别,关键是引用方法上,请参考文章尾部的API链接。 直接复制下面的 vue+leaf…

LateX--插入公式类型详解

文章目录 1.公式插入基本格式1.1.行间公式1.2.段间公式1.2.1.段间公式(无编号)1.2.2.段间公式(有编号) 1.3.公式行列间隔1.4.希腊字母编辑 2.公式合并与拆分2.1.公式合并2.2.公式拆分 3.公式编号3.1.大括号单编号3.2.大括号多编号3.3.多行公式单编号3.4.多行公式无编号3.5.子行…

Linux shell编程学习笔记41:lsblk命令

边缘计算的挑战和机遇 边缘计算面临着数据安全与隐私保护、网络稳定性等挑战&#xff0c;但同时也带来了更强的实时性和本地处理能力&#xff0c;为企业降低了成本和压力&#xff0c;提高了数据处理效率。因此&#xff0c;边缘计算既带来了挑战也带来了机遇&#xff0c;需要我…

HCIA-HarmonyOS设备开发认证-HarmonyOS简介

目录 前言目标一、HarmonyOS简介1.1、初识HarmonyOS1.2、HarmonyOS典型应用场景 二、HarmonyOS架构与安全2.1、HarmonyOS架构 前言 本章主要介绍HarmonyOS分布式操作系统的概念、关键技术与能力以及HarmonyOS典型的应用场景。 目标 学习完成本课程后&#xff0c;您将能够&…

php目录操作示例

目录 1.常用函数 2.列举当前目录列表 3.判断是否是文件夹 1.常用函数 函数名功能scandir 列出指定路径中的文件和目录 opendir 打开文件夹&#xff0c;返回操作资源 readdir读取文件夹资源closedir 关闭文件夹操作资源 is_dir 判断是否是文件夹 filetype 显示是文件夹还是文…

基于Django的计算机编程技术学习与服务平台

临近毕业&#xff0c;又到了赶毕设的时候了&#xff0c;本次介绍分享一下自己的毕业设计项目吧。 项目主题&#xff1a;基于Django的计算机技术编程技术学习与服务平台 实现功能&#xff1a; 1.登入&#xff1a;用户的登陆注册 2.Python教程&#xff1a;实现用户的Python技…

学习CANopen --- [12] Abort报文

当我们使用SDO进行读写操作时&#xff0c;有时device会返回abort报文&#xff0c;意味着本次SDO读写失败。本文使用例子来讲解Abort报文&#xff0c;以及如何解读失败原因。 一 Device例子 下面是device的python代码&#xff0c;文件名叫device.py&#xff0c;device的CANopen…

「斗破年番」大紫研爆虐六星斗皇,佛怒火连回归,异火焚烧分身

Hello,小伙伴们&#xff0c;我是拾荒君。 国漫《斗破苍穹年番》第80期超前爆料&#xff0c;据透露韩枫以海心焰这一异火贡献给了慕骨老人&#xff0c;换取了一具斗宗躯体。通过灵魂融入&#xff0c;他成功达到了斗宗四星阶段。而与小医仙对决的莫天行&#xff0c;尽管两人实力…

基于 GPT 和 Qdrant DB 向量数据库, 我构建了一个电影推荐系统

电影推荐系统自从机器学习时代开始以来就不断发展&#xff0c;逐步演进到当前的 transformers 和向量数据库的时代。 在本文中&#xff0c;我们将探讨如何在向量数据库中高效存储数千个视频文件&#xff0c;以构建最佳的推荐引擎。 在众多可用的向量数据库中&#xff0c;我们将…

2024 年 7 个 Web 前端开发趋势

希腊哲学家赫拉克利特认为&#xff0c;变化是生命中唯一不变的东西。这句话适用于我们的个人生活、行业和职业领域。 尤其是前端开发领域&#xff0c;新技术、开发趋势、库和框架不断涌现&#xff0c;变化并不陌生。最近发生的一些事件正在改变开发人员构建网站和 Web 应用的方…

Ranger概述及安装配置

一、前序 希望拥有一个框架,可以管理大多数框架的授权,包括: hdfs的目录读写权限各种大数据框架中的标的权限,列级(字段)权限,甚至行级权限,函数权限(UDF)等相关资源的权限是否能帮忙做书库脱敏Ranger框架应运而生。 二、Ranger 2.1、什么是ranger Apache Ranger…

如何使用pytorch的Dataset, 来定义自己的Dataset

Dataset与DataLoader的关系 Dataset: 构建一个数据集&#xff0c;其中含有所有的数据样本DataLoader&#xff1a;将构建好的Dataset&#xff0c;通过shuffle、划分batch、多线程num_workers运行的方式&#xff0c;加载到可训练的迭代容器。 import torch from torch.utils.dat…

ElasticSearch 7.x现网运行问题汇集1

问题描述&#xff1a; 现网ElasticSearch health状态变为red&#xff0c;有分片无法assign。如下摘录explain的结果部分&#xff1a; "note": "No shard was specified in the explain API request, so this response explains a randomly chosen unassigned s…

基于BERT对中文邮件内容分类

用BERT做中文邮件内容分类 项目背景与意义项目思路数据集介绍环境配置数据加载与预处理自定义数据集模型训练加载BERT预训练模型开始训练 预测效果 项目背景与意义 本文是《用BERT做中文邮件内容分类》系列的第二篇&#xff0c;该系列项目持续更新中。系列的起源是《使用Paddl…