node.js基础知识

引言

本篇文章涉及的内容仅仅是node.js的基础知识,其主要目的是供日后复习和查阅,不会涉及第三方库。

初始node.js

什么是node.js

Node.js是js的后端运行环境,有了Node.js就可以用js做一些后端可以可以做得事。

安装node.js

官网安装地址
安装时的选项全部默认即可

安装完成后在命令行输入

node -v

如果显示了node的版本,则安装成功

用node.js运行js代码

在命令行输入

node [js文件的路径]

就可以运行代码了

fs文件系统模块

引入fs文件系统模块

调用require函数,参数为所需导入的模块。

const fs = require('fs')

文件读取

fs.readFile(path[, options], callback)
  • path是文件的路径,
  • options是可选参数,表明文件编码的格式。
  • callback是回调函数,用于查看读取文件的结果。

例子:

// 导入fs模块
const fs = require('fs')

//读取当前目录下的1.txt文件
fs.readFile('./1.txt', 'utf-8', function(err, data){
    //callback将会在读取文件结束后被调用,err表示错误时错误信息,data表示成功时读取的文件内容
    if(err){
        console.log('文件读取失败!',err);
    }else{
        console.log('文件读取成功!其内容为:\n', data);
    }
})

写入文件

函数格式

fs.writeFile(file, data[, options], callback)
  • file是文件路径
  • data是需要写入的数据
  • options是编码的格式,默认是utf8
  • callback是回调函数,在写入文件完毕后被调用
    如果文件不存在,则创建一个新文件,存在则覆盖文件
// 导入模块
const fs = require('fs')

//向当前目录的2.txt文件中写入数据
fs.writeFile('./2.txt', '天街小雨润如酥,草色遥看近却无。', function(err){
    console.log(err);
})

__dirname

__dirname是node.js提供的一个成员,写在哪个文件中,__dirname就是这个文件所属的目录。可以用其解决路径动态拼接的问题。

path模块

path模块是Node.js官方提供、用于处理路径的模块。

path.join()

path.join()用于拼接多个路径,返回拼接后的结果

path.join([...paths])

注:path.join的用法要比直接使用加号进行字符串拼接要智能,比如其中一个参数使用了‘…/’,则会自动跳过上一级路径。

const path = require('path')

pathStr = path.join('a', '/b', './c', '../d', 'e')
console.log(pathStr);//a\b\d\e

path.basename()

path.basename()用于返回一个路径下的文件名称部分。

path.basename(fpath, [文件后缀])
// 导入模块

const path = require('path')
const fpath = '/a/b/c.txt'

var fullName = path.basename(fpath)
console.log(fullName);//c.txt

fullName = path.basename(fpath, '.txt')
console.log(fullName);//c

fullName = path.basename(fpath, 'txt')
console.log(fullName);//c.

path.extname()

使用path.extname()方法,可以获取路径中的拓展名部分
语法格式

path.extname(path)

参数解读

  • path表示路径
  • 返回值为路径下文件的后缀名
const path = require('path')

const fpath = 'a/b/hello.txt'
console.log(path.extname(fpath));//.txt

http模块

http模块可以用几行简单的命令就可以将自己的电脑变成一个web服务器,对外提供web服务。

创建一个web服务器

// 导入http模块
const http = require('http')
//创建web服务器实例
const server = http.createServer()
//监听客户端请求(绑定request事件)
server.on('request', function(req, res){
    console.log('Someone visit our web serve.');
})
//启动服务器
server.listen(80, function(){
    console.log('server running at http://127.0.0.1');
})

request事件的回调函数

当有人访问我们的服务器时,就会触发request中的回调。

形参req

req是请求头,客户端在访问web地址时会向web服务器发出一个请求,req中包含了请求的数据和属性。
req.url包含了请求的地址,req.method包含了请求的方式。

// 导入http模块
const http = require('http')
//创建web服务器实例
const server = http.createServer()
//监听客户端请求(绑定request方法)
server.on('request', function(req, res){
    //req是请求对象,包含客户端相关的数据或属性
    //req.url返回请求的URL地址
    //req.method是客户端的method请求类型
    console.log(`req.url is ${req.url}, req.method is ${req.method}`);
})
//启动服务器
server.listen(80, function(){
    console.log('server running at http://127.0.0.1');
})

形参res

res是响应头。其有一个end()方法,可以返回信息给客户端,并结束这次请求。

// 导入http模块
const http = require('http')
//创建web服务器实例
const server = http.createServer()
//监听客户端请求(绑定request方法)
server.on('request', function(req, res){
    //res是返回对象,可以通过它的end方法返回消息给客户端,并结束此次请求。
    let str = 'this is a message res return'
    res.end(str)
})
//启动服务器
server.listen(80, function(){
    console.log('server running at http://127.0.0.1');
})

注:end方法返回的字符串可以使用html标签,返回页面时渲染。

解决返回中文字符出现乱码的问题

设置将响应头的’Content-Type’设置为’text/html;charset=utf-8’

server.on('request', function(req, res){
    //res是返回对象,可以通过它的end方法返回消息给客户端,并结束此次请求。
    res.setHeader('Content-Type', 'text/html;charset=utf-8')
    let str = '这是一条res返回的信息'
    res.end(str)
})

模块化

模块的分类

模块类型说明
内置模块由node.js提供的,在安装node.js时就附带的
自定义模块程序员创建的js文件
第三方模块由第三方提供的,使用前需要去下载

模块的加载

//加载内置模块或第三方模块 require([模块名称])
const fs = require('fs')
const moment = requuire('moment')
//加载自定义模块 require([模块路径])
const custom = require('./a/b/custom.js')

注:使用require加载模块时会运行模块中的代码。

模块作用域

在自定义模块中定义的成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域。

向外共享模块作用域中的成员

module对象

在每个.js自定义模块中都有一个module对象,它里面存储了和当前模块有关的信息。
运行如下代码

console.log(module);

得到

Module {
  id: '.',
  path: 'C:\\Users\\25350\\Desktop\\node_study\\模块化',
  exports: {},
  filename: 'C:\\Users\\25350\\Desktop\\node_study\\模块化\\01_module对象.js',
  loaded: false,
  children: [],
  paths: [
    'C:\\Users\\25350\\Desktop\\node_study\\模块化\\node_modules',
    'C:\\Users\\25350\\Desktop\\node_study\\node_modules',
    'C:\\Users\\25350\\Desktop\\node_modules',
    'C:\\Users\\25350\\node_modules',
    'C:\\Users\\node_modules',
    'C:\\node_modules'
  ]
}

module对象中的exports属性

exports属性用来向外界提供模块中的成员,外界使用require方法导入自定义模块时,导入的就是module.exports所指向的对象。

exports对象

由于module.exports写起来较为繁琐,Node提供了exports对象,默认情况下两者是等价的,指向同一个对象,如果发生冲突,以module.exports为准。

包与npm

常用命令

安装第三方包
完整命令
npm install [包的完整名称]
简写命令
npm i [包的完整名称]
指定包的版本
npm i [包的完整名称]@[版本号]
------------------------------------------
快速创建package.json文件
npm init -y
上述命令所在问路径中只能有英文,不能有中文或者空格!
------------------------------------------
安装所有package.json中dependencies中的包
npm install
-----------------------------------------
卸载指定包
npm unintall [包的名称]
---------------------------------------
将包安装在devDependencies节点中,表明这些包只会在开发的时候用到,在上线时不会用到。
npm i [包的名称] -D
或者
npm install [包的名称] --save-dev
--------------------------------------
查看下包镜像源
npm config get registry
切换下包服务站地址
npm config set registry=[服务器地址]
-------------------------------------
安装全局包
npm install [包的名称] -g
卸载全局包
npm unstall [包的名称] -g
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值