三阶段--node.js

node复习

node概述

node就是js的运行环境,在node环境中没有浏览器的一些内容。但是内置额外的增加了一些模块,

node应用场景

1、作为后端的API服务来提供数据支持

2、作为前端的开发环境

npm

初始化项目

npm也叫做包管理器,可以管理好项目中所依赖的一些第三方的软件包。这些依赖信息全部记录在package.json

的文件中

npm init -y

npm包管理

本地与全局安装

1、全局安装

npm install -g 包名称 

全局安装一般是为了得到一个全局的操作命令

2、本地安装

npm install 包名称

在当前项目的目录下会使用node_modules目录保存相关的源码文件

开发与生产依赖

是根据包对项目的作用进行区分,有的包只是为了辅助写代码就叫开发依赖,部分是项目必不可少,叫做生产依赖

1、开发依赖

npm install --save-dev 包名称

2、生产依赖

npm install --save 包名称

自动重启应用

当使用node解析文件时,node会将文件的代码载入到内存中,如果文件修改了,如果不重启导致修改无效

npm install -g nodemon

在这里插入图片描述

模块

node中每一个文件就是一个模块。每个模块中都内置有module对象(类似浏览器端的window对象)。可以通过module.exports或者exports进行导出

1、导出

const fn = number => console.log(number)

module.exports ={
    fn
}

2、导入

const {fn} = require('./1、导出')
console.log(fn) 

内置模块

文档地址: https://www.nodeapp.cn/fs.html#fs_event_open

OS模块

const os = require('os')

// 换行的分割符号
console.log('a'+os.EOL+'b');
// 查看内存 单位是字节
console.log(os.freemem())

console.log(os.freemem()/1024/1024)

path模块

在使用浏览器访问Apache下的文件时,所使用的url地址绝对会跟指定目录下的文件对应起来,path模块就是用于

处理文件目录信息

const path = require('path')
const filename = 'a/b/c/1.jpg'
// 提取地址中文件名称
console.log(path.basename(filename))
// 提取目录信息
console.log(path.dirname(filename));
// 获取文件的后缀名称
console.log(path.extname(filename))

// 分析文件的地址信息返回为对象 对立的方法叫做format 用于将对象格式的地址组装起来
console.log(path.parse(filename))
// 获取文件目录分割符号 window是\ Linux是/
console.log(path.sep)
// 组装地址 自动根据操作系统的分割符号进行拼接  并且参数任意个数 也可以使用../表示上一级
console.log(path.join('a','b','c','d','1.txt'))


// __filename __dirname 在那个文件下运行就显示对应文件的 地址信息
// 获取当前的文件的绝对地址
console.log(__filename)
// 获取当前文件的目录信息
console.log(__dirname)
const {fn} = require('./1、导出')
fn()

url模块

const url = require('url')
let requestUrl = 'http://baidu.com/a/b/c/index.html?wd=余金跟江佳佳...&desc=击剑'
// parse只是不推荐而已
// 第一个参数指定要分析的地址 第二个参数指定是否要将URL中额外的参数转换为对象
console.log(url.parse(requestUrl,true))
/**
 * Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'baidu.com',
  port: null,
  hostname: 'baidu.com',
  hash: null,
  search: '?wd=余金跟江佳佳...&desc=击剑',
  query: [Object: null prototype] { wd: '余金跟江佳佳...', desc: '击剑' },
  pathname: '/a/b/c/index.html',
  path: '/a/b/c/index.html?wd=余金跟江佳佳...&desc=击剑',
  href: 'http://baidu.com/a/b/c/index.html?wd=余金跟江佳佳...&desc=击剑'
}
 */
console.log(url.parse(requestUrl,true).query.desc)

fs模块

读文件

const fs = require('fs')
/**
 * 异步读取文件内容
 * fs.readFile(path[, options], callback)
 */

fs.readFile('1、导出.js',(error,content)=>{
    if(error){
        console.log('读取文件错误')
        return
    }
    console.log(content.toString())
})
/**
 * 同步读取文件
 */
try {
    let content = fs.readFileSync('2、导入1.js')
    console.log(content.toString())
} catch (error) {
    console.log('文件地址错误') 
}



写文件

const fs = require('fs')

/**
 * 异步写入
 * fs.writeFile(file, data[, options], callback)
 */
fs.writeFile('1.txt','李祥神',err=>{
    err && console.log('写入错误 检查权限与文件地址')
})

查看文件的信息

1、查看文件信息

const fs = require('fs')

// statSync 是查看文件的方法 返回的是一个Stats对象
let fileStatus = fs.statSync('1.txt')
console.log(fileStatus)

2、结果

在这里插入图片描述

3、判断是否是文件

const fs = require('fs')

// statSync 是查看文件的方法 返回的是一个Stats对象
let fileStatus = fs.statSync('1.txt')
console.log(fileStatus)

console.log('1.txt是不是文件:',fileStatus.isFile())
console.log('1.txt是不是目录:',fileStatus.isDirectory())

读取目录下的信息

// 读取目录信息 就是将目录下的信息进扫描  所有的文件信息全部放到数组中
let files = fs.readdirSync('project')
console.log(files)

判断文件是否存在

// 判断文件是否存在
console.log(fs.existsSync('a/b/1.txt'))

http模块

// 导入内置模块
const http = require('http')
const server = http.createServer();

// 创建服务
http.createServer((request, response) => {
    // 匿名函数就是请求到达之后的处理程序 request是node自动给我们的请求对象 response也是自动给过来的响应对象,如果需要从请求中获取内容就使用 request对象,如果需要进行响应控制 就设置response对象
    // 获取请求地址
    console.log(request.url)
    // 获取请求头
    console.log(request.headers)
    // 获取请求方式
    console.log(request.method)
    // 设置响应头中content-type
    response.setHeader('Content-Type','text/html;charset=utf-8')
    // 向响应体中写入内容
    response.write('还有4天放假')
    // 如果响应体中内容已经设置完毕 一定要调用end方法标注一下,一旦调用了end 系统就会自动的组装http协议的响应格式进行发送
    response.end('')

}).listen(8080, err => err && console.log('端口号被占用了'))

模拟Apache文件列表

const http = require('http')
// 载入地址模块
const path = require('path')
// 载入文件模块
const fs = require('fs')
// 需要列出来的目录
const rootPath = path.join(__dirname,'project') 
// 创建服务
http.createServer((request, response) => {
    let files = fs.readdirSync(rootPath)
    // 读取模板中的内容 得到的结果为字符串
    let content = fs.readFileSync('tpl.html').toString()
    let newContent = ''
    files.forEach(item=>newContent+=`<li><a href="">${item}</a></li>`)
    // 先将要显示的标签组装完成 最后在将模板字符串进行替换
    content = content.replace('{{content}}',newContent)
    response.end(content)

}).listen(8080, err => err && console.log('端口号占用'))

搭建web服务

实现使用node代码完成提供web服务 不论请求是静态资源还是接口都能够正常使用

// 载入http模块
const http = require('http')
// 载入文件模块
const fs = require('fs')
// 载入url模块
const url = require('url')
// 载入path模块
const path = require('path')
// 定义项目的根目录
const rootPath = path.join(__dirname,'jd_shop')
// 创建服务
http.createServer((request, response) => {
    // 从url地址上提取有用的数据 query请求携带的参数 pathname请求的路径
    let {query,pathname} = url.parse(request.url,true)
    // 组装用户访问的地址
    let filename = path.join(rootPath,pathname)
    // 验证用户请求的文件是否存在
    if(fs.existsSync(filename)){
        // 读取文件内容 将文件的内容发送出去
        let content = fs.readFileSync(filename)
        response.end(content)
    }else{
        // 文件不存在
        // 设置响应状态码
        response.statusCode = 404
        response.end('not found')
    }

}).listen(8080, err => err && console.log('端口号占用'))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

goto_w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值