nodejs 入门

发布于:2022-12-26 ⋅ 阅读:(669) ⋅ 点赞:(0)

nodejs 简介

如何确认当前电脑是否已经安装了Node环境

打开终端,输入 node -v,如果能看到版本号则说明当前电脑已经安装Node环境,如果提示Node不是内部或外部命令,则表示未安装

一旦安装了node,则会自动一并安装npm

npm介绍

  • 1.npm

    • 全称node package manager

    • 官方推出的包管理工具

    • 不需要额外安装,安装node之后自带

    • 因为服务器不在国内,所以有时候安装特别慢,甚至无法成功

  • 2.npm更改镜像源提升网速

    • 打开终端执行命令修改镜像源 npm config set registry https://registry.npm.taobao.org/

    • 查看当前npm得镜像源:npm config list

服务端js与客户端js区别

  • 1.客户端JS由三部分组成

    • ECMAScript:确定js的语法规范

    • DOM:js操作网页内容

    • BOM:js操作浏览器窗口

  • 2.服务端JS只有ECMAScript

    • 因为服务端是没有界面的

      • ==在nodejs中使用dom与bom的api程序会报错==

/*
1.前端js组成部分: ECMAScript,DOM,BOM
ECMAScript: 确定js语法规范
变量,数据类型,运算符与表达式,流程控制语句
DOM: js操作页面类型 
document
BOM: js操作浏览器窗口
window

2.服务端js组成部分: ECMAScript
*在nodejs中,不能使用DOM语法 和 BOM语法
*/
const a = 10
const b = 20
console.log(a > b ? a : b)

nodejs模块化介绍

  • 1.nodejs是一个渐进式框架, 我们后面要学习的vue框架也是渐进式框架

  • 2.什么是渐进式框架呢 : 一个功能对应一个模块(js文件), 需要用的时候导入即可

    • 说人话:

      • 非渐进式框架 : 套餐, 一次性导入所有的功能。 无论是的项目用还是不用(浪费资源)

      • 渐进式框架 : 自助餐。 吃什么用什么,不浪费。(节省资源)

fs文件模块(读写文件)

//1.导入模块,使用模块
//const 对象名 = require('文件路径')
const fs = require('fs')

//2.使用模块
/**
* @description: 读取文件
* @param {string} path: 文件路径
* @param {string} encoding: 文件编码 默认二进制 utf8:中文 一般不传
* @param {function} (err,data)=>{err: 错误信息,data:读取的信息}
* @return: 
*/
fs.readFile(`${__dirname}/data/aaa.txt`, 'utf8', (err, data) => {
    if (err) {//有err,失败
        throw err
    } else {//没有err,成功
        console.log(data)
    }
})

同步与异步区别

const fs = require('fs')

/*
js从上往下解析代码流程
    1.判断是同步还是异步
    2.如果是同步,则立即执行
    3.如果是异步,则不执行,而是放入事件循环中(Event Loop)
    4.所有代码解析完毕之后,开始执行事件循环中的异步代码
*/
/*
异步操作    事件 定时器 ajax
1.不会阻塞线程(性能高)
2.无序执行
3.有回调函数 
*/
/* 
同步操作
1.会阻塞线程(性能低)
2.有序执行
*/
/*
区别
1.执行顺序: 异步无序执行,同步有序执行
2.执行优先级: 先执行同步,后执行异步
3.回调函数: 异步一般有回调
  *异步一般有回调,但不是所有回调都是异步
4.性能: 同步阻塞线程,异步不会阻塞线程
*/

//异步async
fs.readFile(`${__dirname}/data/aaa.txt`,(err,data)=>{
    if (err) {
        throw err
    } else {
        console.log(1111);
    }
})
fs.readFile(`${__dirname}/data/aaa.txt`,(err,data)=>{
    if (err) {
        throw err
    } else {
        console.log(2222);
    }
})
fs.readFile(`${__dirname}/data/aaa.txt`,(err,data)=>{
    if (err) {
        throw err
    } else {
        console.log(3333);
    }
})
//同步async
const datal = fs.readFileSync(`${__dirname}/data/aaa.txt`)
console.log(4444);

区别

1.执行顺序: 异步无序执行,同步有序执行

2.执行优先级: 先执行同步,后执行异步

3.回调函数: 异步一般有回调

  *异步一般有回调,但不是所有回调都是异步

4.性能: 同步阻塞线程,异步不会阻塞线程

try-catch捕捉异常

/*
try-catch: 用于捕捉代码异常
代码出现爆红(语法错误),也不会对后面的代码产生影响
*/

try {
    let obj = {}
    for (let i = 1; i <= 5; i++) {
        obj.age++
    }
    console.log(obj);
} catch (err) {
    console.log(err)
}
console.log(111);

/* 
try-catch作用:捕捉代码异常,且不影响后面代码执行 
try{
    需要执行的代码
}catch(err){
    如果try中的代码执行错误了,就会执行catch代码
})
*/

 

nodejs中的相对路径

//1.导入fs模块
const fs = require('fs')
//2.使用模块
fs.readFile(`${__dirname}/aaa.txt`, 'utf8', (err, data) => {
    if (err) {
        throw err
    } else {
        console.log(data);
    }
})

//在nodejs中,读取文件一般不能使用相对路径.只能用绝对路径
/*
a.注意点: node中的相对路径: ./  不是相对于当前文件所在路径,而是相对于执行node命名的文件夹路径
在服务端开发中,一般不要使用相对路径,而使用绝对路径
b.解决方案:在nodejs中,每一个js文件都有两个全局属性,它可以帮助我们获取到文件的绝对路径
    __filename:当前js文件自己绝对路径
    __dirname:当前js文件目录绝对路径
*/
/*
如果想要获取当前文件夹下其他文件绝对路径,可以使用 __dirname属性来拼接
*/
console.log(__filename);
console.log(__dirname);

path路径模块拼接路径

使用path模块拼接文件路径与  使用 '+'连接符拼接的好处
    1.会自动帮我们正确添加路径分隔符  '/',我们无需手动添加
    2.当我们路径格式拼接错误的时候,能自动帮我们转换正确的格式

//导入fs模块
const path = require('path')
let newPath = path.join(__dirname,'aaa.txt')
console.log(newPath)
console.log(`${__dirname}/aaa.txt`)
/*
使用path模块拼接文件路径与  使用 '+'连接符拼接的好处
1.会自动帮我们正确添加路径分隔符  '/',我们无需手动添加
2.当我们路径格式拼接错误的时候,能自动帮我们转换正确的格式
*/

 

http模块搭建服务器

//1.导入模块(安装服务器软件 phpstudy)
const http = require('http')

//2.创建服务器(开启软件窗口)
/* 
参数:回调函数
req: request 请求报文
处理
res: response 响应报文
 */
const app = http.createServer((req, res) => {
    //获取客户端请求路径
    console.log(req.url,decodeURI(req,url))
    
})

//3.开启服务器(点击软件窗口启动按钮)
/*
第一个参数:端口号  一般1000-60000之间
第二个参数:ip地址  默认不写 就是本地ip 
第三个参数:成功回调
 */
//本机iP 127.0.0.1
app.listen(3000, '192.168.88.168', () => {
    console.log('服务器开启成功')
})

http模块根据不同请求响应不同数据

//1.导入模块(安装服务器软件 phpstudy)
const http = require('http')

//2.创建服务器(开启软件窗口)
/* 
参数:回调函数
req: request 请求报文
处理
res: response 响应报文
 */
const app = http.createServer((req, res) => {
    //获取客户端请求路径
    console.log(req.url,decodeURI(req,url))
    //处理
    if (req.url === '/index') {
        res.end('index')
    } else if (req.url === '/login') {
        res.end('login')
    } else {
        //响应报文
        res.end('404 not found')
    }
})

//3.开启服务器(点击软件窗口启动按钮)
/*
第一个参数:端口号  一般1000-60000之间
第二个参数:ip地址  默认不写 就是本地ip 
第三个参数:成功回调
 */
//本机iP 127.0.0.1
app.listen(3000, '192.168.88.168', () => {
    console.log('服务器开启成功')
})

http响应客户端HTML文件

//1.导入模板
const http = require('http')
const fs = require('fs')
//2.创建服务器
const app = http.createServer((req, res) => {
    //请求报文
    console.log(req.url);
    //处理
    if (req.url === '/index') {
        fs.readFile(`${__dirname}/index.html`, (err, data) => {
            if (err) {
                throw err
            } else {
                res.end(data)
            }
        })
    } else if (req.url === '/login') {
        fs.readFile(`${__dirname}/login.html`, (err, data) => {
            if (err) {
                throw err
            } else {
                res.end(data)
            }
        })
    } else {
        //响应报文
        res.end('404 not found')
    }
})
//3.开启服务器
app.listen(3000, () => {
    console.log('服务器开启成功')
})

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到