NodeJS(一):基础入门

本文详细介绍了NodeJS的基础知识,包括其概念、特点、安装与使用,以及核心API如fs、path、http模块的使用。此外,还探讨了NodeJS的模块化系统,特别是CommonJS规范,讲解了如何导出和加载模块。最后,文章介绍了Express框架的安装、基本使用和中间件的运用,展示了如何处理HTTP请求和响应。通过本文,读者可以全面了解NodeJS的初步应用。
摘要由CSDN通过智能技术生成

有参看其他文章

  • 尚硅谷视频笔记:https://github.com/smallC-L-Y/Demo/blob/notes/nodeJS%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0.md
  • https://www.cnblogs.com/coder-lzh/p/9232192.html
  • commonJS模块规范:https://javascript.ruanyifeng.com/nodejs/module.html
  • nodejs的express入门:https://www.jianshu.com/p/ad6c0e58d020
一、概念
1.什么是nodejs
  • Node.js是JavaScript 运行时环境,通俗易懂的讲,Node.js是JavaScript的运行平台
  • Node.js既不是语言,也不是框架,它是一个平台
2.nodejs特点
  • 没有Bom,Dom
  • 在Node中这个JavaScript执行环境为JavaScript提供了一些服务器级别的API
    • 例如文件的读写
    • 网络服务的构建
    • 网络通信
    • http服务器
  • 构建在Chrome的V8引擎之上,意味着nodejs的执行效率很高
  • 基于事件驱动envent-driven ,non-blocking I/O mode 非阻塞I/O模型(异步)ightweight and efficent. 轻量和高效
  • 包含NPM包管理器,npm 是世界上最大的开源生态系统,绝大多数JavaScript相关的包都存放在npm上,这样做的目的是为了让开发人员更方便的去下载使用
3.nodejs可以做什么
  • web服务器后台
  • 命令行工具,执行npm命令等
  • 借助npm包管理器构建项目,和上传自己的组件
二、安装和使用

到官网下载Node,并一路next就能完成安装,如果安装过后再次安装新版本则会自动升级安装。官网:https://nodejs.org/en/

确认是否安装成功,输入以下命令查看版本号:

node --version

配置目录

在nodejs安装目录创建【node_global】及【node_cache】两个文件夹

在这里插入图片描述

创建完两个空文件夹之后,打开cmd命令窗口,输入

npm config set prefix "D:\Develop\nodejs\node_global"
npm config set cache "D:\Develop\nodejs\node_cache"

接下来设置环境变量,关闭cmd窗口,“我的电脑”-右键-“属性”-“高级系统设置”-“高级”-“环境变量”

进入环境变量对话框,在【系统变量】下新建【NODE_PATH】,输入【D:\Develop\nodejs\node_global\node_modules】

在这里插入图片描述

将【用户变量】下的【Path】修改为【D:\Develop\nodejs\node_global】

在这里插入图片描述

三、核心API的使用
Global 全局对象

Global是node.js的全局对象,使用它里面的属性或方法或子对象,可以不用加global

例如

global.console.log('你好');

**另外:**这些对象在所有的模块中都可用。 以下的变量虽然看似全局的,但实际上不是。 它们仅存在于模块的作用域中

console.log('Dirname:',__dirname);
console.log('Filename:',__filename);
console.log('Exports:',exports);
console.log('Module:',module);
console.log('require:',require);

打印结果:

Dirname: F:\vue_project\learn_nodeJs\src\01-NodeJs初步使用
Filename: F:\vue_project\learn_nodeJs\src\01-NodeJs初步使用\5-全局变量.js
Exports: {
   }
Module: Module {
   
  id: '.',
  path: 'F:\\vue_project\\learn_nodeJs\\src\\01-NodeJs初步使用',
  exports: {
   },
  parent: null,
  filename: 'F:\\vue_project\\learn_nodeJs\\src\\01-NodeJs初步使用\\5-全局变量.js',
  loaded: false,
  children: [],
  paths: [
    'F:\\vue_project\\learn_nodeJs\\src\\01-NodeJs初步使用\\node_modules',
    'F:\\vue_project\\learn_nodeJs\\src\\node_modules',
    'F:\\vue_project\\learn_nodeJs\\node_modules',
    'F:\\vue_project\\node_modules',
    'F:\\node_modules'
  ]
}
require: [Function: require] {
   
  resolve: [Function: resolve] {
    paths: [Function: paths] },
  main: ...,//省略内容
  extensions: ...,//省略内容
  cache: ...,//省略内容
}
1.fs模块的使用

浏览器中的JavaScript是没有文件操作能力的,但是Node中的JavaScript具有文件操作能力,在Node中如果想要进行文件的操作就必须引用fs这个核心模块。fs模块提供了了所有文件操作相关的API

下面是一些基本的代码示例:

1.1文件读取
//  1.使用fs核心模块
var fs = require('fs');

/**
 * filename, 必选参数,文件名
 * [options],可选参数,可指定flag(文件操作选项,如r+ 读写;w+ 读写,文件不存在则创建)及encoding属性
 * callback 读取文件后的回调函数,参数默认第一个err,第二个data 数据
 */
fs.readFile('./data/a.txt',function(err,data){
   
   if(err){
   
        console.log('文件读取失败');
   }
    else{
   
         console.log(data.toString());
    }
})


// readFileSynsc();同步操作a也是就是说会等当前执行完后在,才会输出2,(阻塞)
let data = fs.readFileSync('./text.txt');
console.log(data.toString())
console.log(2);
1.2文件写入
//  1.使用fs核心模块
var fs = require('fs');

/**
 * filename, 必选参数,文件名
 * data, 写入的数据,可以字符或一个Buffer对象
 * [options],flag,mode(权限),encoding
 * callback 读取文件后的回调函数,参数默认第一个err,第二个data 数据
 * 文件不存在则会自动创建一个文件
 */
fs.writeFile('./data/a.txt','我是文件写入的信息',function(err){
   
   if(err){
   
        console.log('文件写入失败');
   }
})


// 同步版本的写入
fs.writeFileSync('./2.text','我是同步写入的文件')
1.3以追加方式写文件
let fs = require('fs');
/*
* 追加文件内容
* */
fs.appendFile('../data/a.txt', '\n使用fs.appendFile追加文件内容', function (error) {
   
    if(error){
   
        console.log('追加文件内容出错');
    }else {
   
        console.log('追加内容完成');
    }

});

// 同步方式
// fs.appendFileSync('../data/a.txt','追加的内容');
1.4创建文件目录
let fs = require('fs');

/**
 * fs.mkdir(path, [mode], callback);
 * path, 被创建目录的完整路径及目录名;
 * [mode], 目录权限,默认0777
 * [callback(err)], 创建完目录回调函数,err错误对象
 */
fs.mkdir('../data/test1',function (error) {
   
    if(error){
   
        console.log('创建文件夹失败');
    }else {
   
        console.log('创建文件夹成功');
    }
});

/*
* 同步方法
* */
fs.mkdirSync('../data/test2');
1.5读取文件目录
// 异步读取文件夹里面的所有文件
fs.readdir('./',(err,files)=>{
   
    if (err) {
   
        console.log(err);
    } else{
   
        // console.log(files); 返回的文件是个数组,可以用forEach循环输出文件名
        files.forEach((x)=>{
   
            console.log('有'+ x +'这个文件');
        })
    }
});
// 同步获取文件夹里面的所有文件
let files = fs.readdirSync('./public');
console.log(files); //返回的是一个数组
1.6删除文件
let fs = require('fs');

//异步操作删除1.text
fs.unlink('./1.text',(err)=>{
   
	if (err) {
   
		console.log(err);
	} else{
   
		console.log('删除文件成功');
	}
})

//同步操作删除2.text
fs.unlinkSync('./2.text');
1.7删除文件目录
let fs = require('fs');

// 异步删除文件夹
fs.rmdir('../data/test1',function (error) {
   
    if(error){
   
        console.log('删除文件夹失败');
    }else {
   
        console.log('删除文件夹成功');
    }

});

// 同步方法
fs.rmdirSync('../data/test2');
1.8判断文件信息
let fs = require('fs');

// 异步获取文件的具体信息
fs.stat('../data/a.txt',(err,info)=>{
   
    if (err) {
   
        console.log('获取文件信息失败:',err);
    } else{
   
        // info.isFile() 判断是不是一个文件 返回结果为true
        console.log(info.isFile());
        // false
        console.log(info.isDirectory());
    }
});
// 同步操作获得文件信息并判断是不是文件夹
let file = fs.statSync('./1.text');

if(file.isFile()){
   
	console.log('这是一个文件');
}else if(file.isDirectory()){
   
	console.log('只是一个文件夹');
}else{
   
	console.log('抱歉这不是一个文件或者文件夹');
}
1.9复制大文件
var fs = require('fs');
//创建读取流
var readStream = fs.createReadStream('./1.zip');
//创建写入流
var writeStream = fs.createWriteStream('./2.zip');
//进行大文件的复制
readStream.pipe(writeStream);
2.path模块的使用

path模块用来处理路径相关内容

2.1格式化路径
let path = require('path');
let url = path.normalize('d:\\\hd///arr/indexindex.php');

// d:\hd\arr\index\index.php
console.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值