Noed.js初步详解

一、 Nodejs简介

Node是JavaScript语言的服务器运行环境。

Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。

Node.js主要用于编写像Web服务器一样的网络应用

中文官网:http://nodejs.cn/
测试Node.js是否安装成功
安装成功之后,可以在window控制台(windows +R 输入cmd 打开)查看是否安装成功。
输入下面的命令查看node的版本。
node -v
在这里插入图片描述

● 学习Node.js是为了解前后端交互流程

● 同时为后面学习前端框架做准备

● 前端有很多业务不能解决,需要使用Node.js处理

Node的特点

  • 单线程和事件驱动:Node.js使用单线程来处理客户端的连接,通过事件驱动机制实现非阻塞I/O,使得程序能够并发处理大量用户连接。这使得Node.js在相同硬件条件下可以处理更多的连接和请求。
  • 高性能和可伸缩性:由于采用了非阻塞I/O和事件驱动的特性,Node.js具有出色的性能和可伸缩性。
  • 底层是C语言编写:Node.js的底层是用C语言编写的,包括Node.js本身和V8引擎。底层代码中的事件队列、回调函数队列等关键组件是用C语言实现的,这使得Node.js可以高效地处理大量的并发请求。

常见的打开命令行

  1. windows +R 输入cmd
  2. 任意文件资源管理器中,地址栏输入:cmd

常见的dos命令

  1. mkdir —> md 创建一个文件夹
  2. dir:显示当前目录中的文件列表。
  3. cd:改变当前目录
  4. del:删除文件。
  5. copy:复制文件。
  6. attrib:更改文件属性。
  7. edit:打开一个文本文件进行编辑。
  8. .md:创建一个新目录。
  9. cls 清屏
    注意,这些命令可能因不同版本的操作系统而有所不同。

Node运行与顶层对象

在cmd工具中,使用命令

​	node 文件名  

代码示例:
console.log("hello world")

顶层对象

在浏览器 JavaScript 中,通常 window是顶层对象,而 Node.js 中的顶层对象是 global

globalThis

代码示例:
js
 console.log(this);//{}
 console.log(global);

 console.log(globalThis);//顶级对象

全局变量

Node平台内置了,例如:__filename__dirname等全局变量 setInterval() setTimeout()等方法

//绝对路径
console.log(__dirname);//E:\郑州20230816\day07\code
//__dirname 表示当前执行脚本所在的目录。
console.log(__filename);//E:\郑州20230816\day07\code\1.全局变量.js
//__filename:表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同。 如果在模块中,返回的值是模块文件的路径。

模块系统

在Node.js中,一个js文件就称之为一个模块(Module)。

简述优势:
将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来

在Node中,模块分为两类:一类是Node提供的模块,称为核心模块;另一类是用户编写的模块,称为文件模块(自定义模块、第三方模块)。

内置模块/核心模块

//内置模块  NodeJS中自带的模块,可以直接使用
/*
    require("模块名")

    fs/url/querystring/qs/path/http....
*/

//url模块     处理url

let myUrl="http://192.168.1.1:3000/admin/login?username=jack&pwd=2342#main";
//协议
//主机名
//端口
//路径
//参数

// const url=require("url");

// // console.log(url);
 let newUrl=url.parse(myUrl)
 console.log(newUrl);
//Url {
  //protocol: 'http:',
  //slashes: true,
  //auth: null,
    //host: '192.168.1.1:3000',
    //port: '3000',
    //hostname: '192.168.1.1',
   // hash: '#main',
  //  search: '?username=jack&pwd=2342',
   // query: 'username=jack&pwd=2342',
  //  pathname: '/admin/logoin',
   // path: '/admin/logoin?username=jack&pwd=2342',
  //  href: 'http://192.168.1.1:3000/admin/logoin?username=jack&pwd=2342#main'
  //}
  //解构
let { host, port, protocol, query, pathname } = newUrl;
console.log(protocol);//http:
console.log(host);//192.168.1.1:3000
console.log(pathname);///admin/logoin
console.log(query);//username=jack&pwd=2342
console.log(port);//3000
//这个是上面那个parse的替换写法,parse不支持使用,但可以用
let mmUrl = new URL(myUrl)
console.log(mmUrl);

文件模块

文件模块常见的有:自定义模块、第三方模块

自定义模块:
需要一个入口文件,来接收导出的文件

let fn = function () {
    console.log('hello world');
}

let fnx = function () {
    console.log('running........');
}


let arr = ['hello', 'yes', 'hi'];

let obj = {
    no: "1002",
    title: "鞋子",
    price: 119
}

//批量导出
module.exports = {
    fn: fn, fnx, arr, obj
}
ES6的模块化 (ESM)

使用export和import

  • 单个导出 : export.名称=值
  • 批量导出: export { 值,…}
  • 默认导出 : export default {}
let obj={
    id:111,
    name:"李强",
    age:18
}

//1.单个导出
export let age=20;
export let name="狗蛋"
export let addr="门口狗窝"
/默认导出
// export default {
//     id: 1,
//     msg: 'ok',
//     fn: function () {
//         console.log('哈哈哈');
//     },
//     fnx() {
//         console.log("hello world");
//     }
// }


let a = 10;
let b = 'hello world';

let fn = function () {
    console.log('run.........');
}

let arr = [10, 20, 304, 890]

export default {
    ax: a,
    b: b,
    fn: fn,
    arr: arr
}

// export default {
//     a,b,fn,arr
// }

//注意:一个模块只能有一个默认导出

// export default {
//     name:"李四"
// }
// console.log(obj);//不能直接访问其它模块的内容

//导入其它模块的内容

//1.导入单个导出
import { age } from "./person.js";
// import {age} from "./person";//error  需要完整的后缀

//2.导入批量导出的内容
import { m1 as mm, m2 } from "./strudent.js"

//3.
import {fn,fx,obj} from "./emplyee.js";

//4.导入默认导出的模块
import xx from "./man.js"

// console.log(age);
// console.log(obj);//error  person.js没有导出obj

// console.log(m1);
// console.log(m2);

// fn()
// fx();
// console.log(obj);


console.log(mm);
// console.log(m1);//已改名,不可以使用


// console.log(xx);

// console.log(xx.id);
// console.log(xx.msg);
// xx.fn()


//入口文件

CommonJS的模块化 (CJS)
使用exports、module.exports 和require

// let name=‘张三’;
// let age=20;
// let addr=“中州大道”;
//单个导出
exports.name = ‘张三’;
exports.age = 20;
exports.addr = “中州大道”;
let arr=[10,100,300];

let arr = [‘hello’, ‘yes’, ‘hi’];
let obj = {
no: “1002”,
title: “鞋子”,
price: 119
}
//批量导出
module.exports = {
arr, obj
}

模块加载机制和Commonjs简述

  • 加载核心模块,如:fs、path等,其实在node运行的时候,已经放到内存中了

  • 加上对应文件后缀,优先级为:test.js > test.json > test.node

  • 搜索路径,如果有指定路径则按照路径去找,如:require(‘./test’) 则在当前目录寻找,如果没有指定路径,则从当前目录下往上去找 node_modules文件夹,然后从文件夹里去遍历寻找对应模块名,如果找不到则到上一层node_modules去找,直到最顶层目录

  • 首次会加载比较慢,后面node.js 会将缓存相关信息到内存避免二次查询

新特性

在node的新版本中,支持使用[node:module API] 即可以使用node:前缀来标识核心模块。

这种方式导入包,它会绕过所需的缓存。

包和npm

在Nodejs中包由由包结构和包描述文件两个部分组成.

包结构:用于组织包中的各种文件,例如:源代码文件、资源文件

包描述文件:描述包的相关信息,例如:package.json、bin、lib等文件

npm

npm是随着Nodejs一起安装的一个包管理工具,它具有以下用途:

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。

  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。

  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

npm常见命令


    1.包
        nodejs中包有两部分组成:包文件和包的描述信息(配置文件、json文件等...)
    2.NPM           node package manger   node包管理器
        1)允许通过NPM从NPM市场下载包
        2)允许通过npm将自己开发的包上传到NPM市场
        3)允许通过npm上传和下载命令
    3.安装
    4.常见的命令
        1)npm  init    初始化代码工程(会在根目录下生成一个package.json的文件)

            其它用法:
                npm init -y
        2)npm install     安装          安装命令执行之后,会在项目的根目录下产生有一个node_modules的目录(以后所有下载的包都会安装到该目录)
            简化为:npm i

            本地安装:将包安装到项目中
                    安装到项目/生产依赖:
                        npm install  包名                   新版nodejs的写法
                        npm install  包名   --save          旧版写法

                        简化为:
                            npm install 包名  -S                npm i 包名 -S
                    安装到开发依赖
                        npm install  包名   --save-dev
                            简化为:
                                npm install 包名 -D             npm i 包名 -D


                    注意:修饰符可以在前、在后
                        npm i 包名 -D
                        npm i -D 包名
            全局安装:将包安装到计算机上(默认C盘)
                        npm i 包名 -g  


            区别:
                生产依赖:包不仅在开发阶段要使用,在生产阶段也要使用
                开发依赖:只在开发阶段使用


            本地安装和全局安装:
                本地安装:适用于绝大多数项目开发包
                全局安装:一般用于安装命令类型包

            例子:全局安装cnpm
                npm install cnpm -g
                换源:
                npm config set registry https://registry.npmmirror.com

package.json文件详解

{
  "name": "node_demo2",		包名
  "version": "1.0.0",		版本号
  "description": "",		项目描述信息
  "main": "index.js",		入口文件
  "scripts": {				命令
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],			关键字
  "author": "",				作者	
  "license": "ISC",			许可协议
  "dependencies": {			生产依赖
    "cookie-parser": "^1.4.6",
    "jquery": "^3.7.0"
  },
  "devDependencies": {		开发依赖
    "express-session": "^1.17.3",
    "less": "^4.2.0"
  }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值