Nodejs笔记

Node和Nodejs是什么

Node是一个基于Chrome V8引擎的javaScript代码运行环境

Node.js是运行在代码环境之上的语言
JavaScript代码运行在浏览器中,JavaScript是语言,浏览器是运行环境
JavaScript代码运行在Node 中,Node.js是语言,Node是运行环境

Nodejs的安装

在官网进行安装https://nodejs.org/en/download/一直下一步就行了

安装完成后,window健+r 弹出运行窗口,输入cmd或者powershell打开命令行窗口,输入 node -v 来查看是否安装成功

Node环境安装失败的解决办法
1.

错误代码2502,2503:表示系统账户权限不足
解决办法: 以管理员身份运行powershell命令行工具 输入运行安装包命令 msiexec /package node安装包位置

执行node -v时报错 显示无法识别:表示Node安装时环境变量写入失败
解决办法:在这里插入图片描述
进入点击计算机属性>高级系统设置>高级>环境变量>Path中添加环境变量
我这是win10系统,win7也是直接在Path中添加,但是win7需要在最后面加分号,把你安装Nodejs的路径添加进去
比如:C:\Program Files\nodejs\

Node.js 的组成和基础语法

JavaScript 由三部分组成,ECMAScript,DOM,BOM。 Node.js是由ECMAScript及Node
环境提供的一些附加API组成的,包括文件、网络、路径等等一些更加强大的 API。

所有ECMAScript语法在Node环境中都可以使用 在Node环境下执行代码,使用Node命令执行后缀为.js的文件即可
切换文件目录比较麻烦,可以当当前工作空间里面按住 shift健 加鼠标右键,选择 此处打开命令窗口

在浏览器中全局对象是window,在Node中全局对象是global。

Node.js模块化开发

JavaScript在使用时存在两大问题,文件依赖和命名冲突

Node.js规定一个JavaScript文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到

模块内部可以使用exports对象进行成员导出, 使用require方法导入其他模块。

模块导出的两种方式
第一种方式
const add = (n1, n2) => n1 + n2;
exports.add = add;
第二种方式
const greeting = name => `hello ${name}`;
module.exports.greeting = greeting;

导出
const a = require('./03.module-a');
console.log(a.add(10, 20));

exports是module.exports的别名(地址引用关系),导出对象最终以module.exports为准,所以我们在使用的时候就需要去注意,如果 exports 跟 model.exports 指向的是同一个对象,那么不会出问题

系统模块

Node运行环境提供的API. 因为这些API都是以模块化的方式进行开发的, 所以我们又称Node运行环境提供的API为系统模块

fs文件操作

读取文件
1.获取系统 fs 模块

const fs = require('fs');

2.通过模块内部的readFile读取文件内容

fs.readFile('./01.helloworld.js', 'utf8', (err, doc) => {
	// 如果文件读取出错err 是一个对象 包含错误信息
	// 如果文件读取正确 err是 null
	// doc 是文件读取的结果
	console.log(err);
	console.log(doc);
});

写入文件

fs.writeFile('./demo.txt', '即将要写入的内容', err => {
	if (err != null) {
		console.log(err);
		return;
	}
	console.log('文件内容写入成功');
})
path 路径操作

1.导入path模块

const path = require('path');

2.路径拼接

// 路径拼接
let finialPath = path.join('itcast', 'a', 'b', 'c.css');
// 输出结果 itcast\a\b\c.css
console.log(finialPath);
  • 大多数情况下使用绝对路径,因为相对路径有时候相对的是命令行工具的当前工作目录
  • 在读取文件或者设置文件路径时都会选择绝对路径
  • 使用__dirname获取当前文件所在的绝对路径

Nodejs第三方模块

下载和删除

使用 npm 命令:npm (node package manager) : node的第三方模块管理工具
下载:npm install
模块名称 卸载:npm unintall package 模块名称

nodemon 模块

nodemon是一个命令行工具,用以辅助项目开发。
在Node.js中,每次修改文件都要在命令行工具中重新执行该文件,非常繁琐,而使用这个模块,可以帮我们监听这个文件的修改,只要修改保存了,就会重新执行一次。 使用-g全局下载它

nrm 模块

npm下载地址切换工具

使用npm install nrm –g 下载它
查询可用下载地址列表 nrm ls
切换npm下载地址 nrm use 下载地址名称

Gulp模块

项目上线,HTML、CSS、JS文件压缩合并
语法转换(es6、less …)
公共文件抽离
修改文件浏览器自动刷新

Gulp插件

gulp-htmlmin :html文件压缩
gulp-csso :压缩css
gulp-babel :JavaScript语法转化
gulp-less: less语法转化
gulp-uglify :压缩混淆JavaScript
gulp-file-include 公共文件包含
browsersync 浏览器实时同步

package.json文件的作用

项目描述文件,记录了当前项目信息,例如项目名称、版本、作者、github地址、当前项目依赖了哪些第三方模块等。
使用npm init -y命令生成。

模块加载机制

1.拥有路劲却没有后缀

1.require方法根据路径进行查找,如果说是完整路径,就直接引入模块
2.如果没有后缀,先找同名JS文件再找同名JS文件夹
3.找文件夹中index.js否则去package.js中查找main选项确定入口文件(如果index.js 和main的入口函数都有,那么就会先执行main的入口函数)
4.没有找到就会报错

2.接收不带路径的模块名字

Node.js会假设它是系统模块
Node.js会去node_modules文件夹中
首先看是否有该名字的JS文件 再看是否有该名字的文件夹
查看该文件夹中的package.json中的main选项确定模块入口文件
如果没有入口文件看里面是否有index.js 否则找不到报错

构建HTTP服务器

1.引入系统模块http

const http = require('http');

2.创建web服务器

const app = http.createServer();

3.当客户端发送请求的时候(监听客户端发送过来的请求)

 app.on('request', (req, res) => {
        //  响应
       res.end('<h1>hi, user</h1>');
 });

4.监听端口号

app.listen(3000);
console.log('服务器已启动,监听3000端口,请访问 localhost:3000')

请求参数

get请求
参数被放置在浏览器地址栏中,例如:http://localhost:3000/name=zhangsan&age=20
参数获取需要借助系统模块url,url模块用来处理url地址

const http = require('http');
 // 导入url系统模块 用于处理url地址
 const url = require('url');
 const app = http.createServer();
 app.on('request', (req, res) => {
     // 将url路径的各个部分解析出来并返回对象
         // true 代表将参数解析为对象格式
     let {query} = url.parse(req.url, true);
     console.log(query);
 });
 app.listen(3000);

post请求

参数被放置在请求体中进行传输
获取POST参数需要使用data事件和end事件
使用querystring系统模块将参数转换为对象格式

// 导入系统模块querystring 用于将HTTP参数转换为对象格式
 const querystring = require('querystring');
 app.on('request', (req, res) => {
     let postData = '';
     // 监听参数传输事件
     req.on('data', (chunk) => postData += chunk;);
     // 监听参数传输完毕事件
     req.on('end', () => { 
         console.log(querystring.parse(postData)); 
     }); 
 });
 app.listen(3000);

路由

指的是客服端请求地址和服务端程序代码的对应关系,
路由是指URL地址与程序的映射关系,更改URL地址可以改变程序的执行结果。简单说就是请求什么响应什么。

// 当客户端发来请求的时候
 app.on('request', (req, res) => {
     // 获取客户端的请求路径
     let { pathname } = url.parse(req.url);
     if (pathname == '/' || pathname == '/index') {
         res.end('欢迎来到首页');
     } else if (pathname == '/list') {
         res.end('欢迎来到列表页页');
     } else {
        res.end('抱歉, 您访问的页面出游了');
     }
 });

Node.js中的Promise

Promise出现的目的是解决Node.js异步编程中回调地狱的问题
异步函数是异步编程语法的终极解决方案,它可以让我们将异步代码写成同步的形式,让代码不再有回调函数嵌套,使代码变得清晰明了。

async关键字

1.它只能出现在异步函数中
2.后面只能写promise对象 其他类型的API都不可以
3.await promise它可以暂停异步函数的执行 等待promise对象返回结果后再向下执行函数

Express框架

提供了方便简洁的路由定义方式
对获取HTTP请求参数进行了简化处理
对模板引擎支持程度高,方便渲染动态HTML页面
提供了中间件机制,有效控制HTTP请求
拥有大量第三方中间件对功能拓展

下载Express第三方模块

npm install express

使用Express创建服务器

//1.引入 express模块
const express = require('express');
//2.创建web服务器
const app = express();
//4.监听get请求
app.get('/', (res, req) => {
    //5.响应页面,利用send方法相应
    req.send('请求成功');
});
//4.监听post请求
app.post('/', (res, req) => {
    //5.响应页面
    req.send('请求成功');
});
//3.监听端口
app.listen(8080);
console.log('链接成功');

路由模块化

// 引入express框架
const express = require('express');
// 创建网站服务器
const app = express();
// 创建路由对象
const home = express.Router();
// 为路由对象匹配请求路径
app.use('/home', home);
// 创建二级路由,用户必须要访问到二级路由才能匹配到相应的回调
home.get('/index', (req, res) => {
	res.send('欢迎来到博客首页页面')
});
// 端口监听
app.listen(3000);

静态资源

通过 Express 内置的 express.static 可以方便地托管静态文件,例如图片、CSS、JavaScript 文件等。

app.use(express.static('public'));

现在,public 目录下面的文件就可以访问了。

http://localhost:3000/images/kitten.jpg
http://localhost:3000/css/style.css
http://localhost:3000/js/app.js
http://localhost:3000/images/bg.png
http://localhost:3000/hello.html

参数处理

接收地址栏中问号后面的参数

// 例如: http://localhost:3000/?name=zhangsan&age=30
console.log(req.query); // {“name”: “zhangsan”, “age”: “30”}

Express中接收post请求参数需要借助第三方包 body-parser

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
req.body // post请求参数

模板引擎

Express框架没有内置模板引擎,但是对其他模板引擎提供了良好的支持,比如art-template。

为了使art-template模板引擎能够更好的和Express框架配合,模板引擎官方在原art-template模板引擎的基础上封装了除了express-art-template。

使用方法

var express = require('express');
var app = express();
// 告诉Express框架 使用art-template模板引擎渲染HTML模板
app.engine('html', require('express-art-template'));
// 当render方法渲染模板时, 如果模板后缀被省略, 则将html作为默认的文件后缀
app.set('view engine', 'html');
// 当render方法渲染模板时, 如果模板所在路径被省略, 则在内部会自动将以下路径进行拼接
// 设置模板所在目录
app.set('views', path.join(__dirname, 'views'));
app.get('/', function (req, res) {
    res.render('index.art', {
        user: {
            name: 'aui',
            tags: ['art', 'template', 'nodejs']
        }
    });
});
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值