Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)

目录

Node.js 文件系统模块(二)

 Node.js 文件系统模块(三)

 Node.js 文件系统模块(四)

Node.js 路径模块 

Node.js 连接 MySQL

 Node.js nodemon

Node.js 操作 MySQL

Node.js 应用


Node.js 文件系统模块(二)

打开文件
fs.open(path, flags[, mode], callback) 

Flag 描述
以读取模式打开文件。如果文件不存在抛出异常。
r+以读写模式打开文件。如果文件不存在抛出异常。
rs 以同步的方式读取文件。
rs+ 以同步的方式读取和写入文件。
以写入模式打开文件,如果文件不存在则创建。
wx类似 'w',但是如果文件路径存在,则文件写入失败。
w+ 以读写模式打开文件,如果文件不存在则创建。
wx+ 类似 'w+', 但是如果文件路径存在,则文件读写失败。
以追加模式打开文件,如果文件不存在则创建。
ax 类似 'a', 但是如果文件路径存在,则文件追加失败。
a+以读写追加模式打开文件,如果文件不存在则创建。
ax+ 类似 'a+', 但是如果文件路径存在,则文件读取追加失败。

const fs=require('fs')
fs.open('input.txt', 'r+', function(err, fd)
{
 if (err) {
   return console.error(err);
 } 
  console.log(fd);
  fs.writeFile(fd, '小童程序员', (err) => {
    if(err){
     return  console.log(err)
   }
    console.log('写入完成')
 })
});

 Node.js 文件系统模块(三)

查看文件
fs.stat(path, callback) 

var fs = require("fs");
fs.stat('input.txt', function (err, stats)
{
 if (err) {
   return console.error(err);
 }
 console.log(stats);
 // 检测文件类型
 console.log("是否为文件 ? " + stats.isFile());
 console.log("是否为目录 ? " + stats.isDirectory());  
});

删除文件
fs.unlink(path, callback)

fs.unlink('input.txt', function(err) {
 if (err) {
   return console.error(err);
 }
 console.log("文件删除成功!");
});

 Node.js 文件系统模块(四)

1、创建目录
fs.mkdir(path[, options], callback) 

var fs = require("fs");
// tmp 目录必须存在
console.log("创建目录 tmp/test");
fs.mkdir("./tmp/test",function(err){
 if (err) {
   return console.error(err);
 }
 console.log("目录创建成功。");
});
fs.mkdir("./tmp/test",{ recursive: true
},function(err){
  if (err) {
    return console.error(err);
 }
  console.log("目录创建成功。");
});

2、读取目录
fs.readdir(path, callback)

var fs = require("fs");
console.log("查看 /tmp 目录");
fs.readdir("./tmp",function(err, files){
 if (err) {
   return console.error(err);
 }
 files.forEach( function (file){
   console.log( file );
 });
});

 3、删除目录
fs.rmdir(path, callback)

var fs = require("fs");
// 执行前创建一个空的 /tmp/test 目录
console.log("准备删除目录 ./tmp/test");
fs.rmdir("./tmp/test",function(err){
 if (err) {
   return console.log(err);
 }
});

 提示:
删除目录,如果目录下面有下一级则报错

Node.js 路径模块 

path 是Node.js的路径模块,用来处理路径。
path.dirname() 

返回路径的目录部分

require('path').dirname('./test/something') // ./test
require('path').dirname('./test/something/file.txt')
// ./test/something

path.extname()
返回路径的扩展名部分

require('path').extname('./test/something') // ''
require('path').extname('./test/something/input.txt') // '.txt'

path.isAbsolute()
如果是绝对路径,则返回 true。

require('path').isAbsolute('/test/something') // true
require('path').isAbsolute('./test/something') // false

path.join()
连接路径的两个或多个部分

const name = '程序员'
require('path').join('/', '小童', name) //'/小童/程序员'

path.parse()
解析对象的路径为组成其的片段:
        root : 根路径。
        dir : 从根路径开始的文件夹路径。
        base : 文件名 + 扩展名
        name : 文件名
        ext : 文件扩展名

require('path').parse('/users/test.txt')
//{
// root: '/',
// dir: '/users',
// base: 'test.txt',
// ext: '.txt',
// name: 'test'
//}

path.relative()
接受 2 个路径作为参数。 基于当前工作目录,返回从第一个路径到第二个路径的相对路径。

require('path').relative('/Users/joe','/Users/joe/test.txt') //'test.txt'
require('path').relative('/Users/joe','/Users/joe/something/test.txt') //'something/test.txt'

 path.resolve()
获得相对路径的绝对路径计算

require('path').resolve('joe.txt')
require('path').resolve('/etc', 'joe.txt') //'/etc/joe.txt'

Node.js 连接 MySQL

1、安装MySQL数据库
安装 xampp
        安装包下载地址: https://sourceforge.net/projects/xampp/files/
        进行下载安装
        启动
        新建数据库,新建表 

2、安装 mysql
yarn add mysql 或者 npm install mysql

3、node.js 连接 MySQL 

var mysql    = require('mysql');
//创建跟数据库的连接
var connection = mysql.createConnection({
 host   : 'localhost',
 user   : 'root',
 password : '',
 database : 'test'
});
//启动连接
connection.connect();
//执行查询
connection.query('select * from test',
function (error, results) {
 if (error) throw error;
 console.log(results);
});

 Node.js nodemon

安装 nodemon
yarn add nodemon 或者 npm install nodemon --save 

 使用nodemon运行脚本

nodemon 脚本文件 

使用package.json脚本

"scripts": {
  "start":"nodemon index.js"
}

 使用 npx

npx nodemon index.js 

Node.js 操作 MySQL

1、查询

connection.query('select * from test where name=?','test1', function (error, results,fields) {
 if (error) throw error;
 console.log(results,'results');
});

 2、插入

connection.query('insert into test(name) values (?)','test3', function (error,results, fields) {
  if (error) throw error;
  if(results.affectedRows){
    console.log('插入成功')
 }
 
});

3、更新

connection.query('update test set value=? where name=?', [10,'test4'], function (error, results, fields) {
  if (error) throw error;
  if (results.affectedRows) {
    console.log('更新成功')
 }
});

4、删除

connection.query('delete from test where name=?', ['test4'], function (error, results, fields) {
  if (error) throw error;
  if (results.affectedRows) {
    console.log('删除成功')
 }
});

Node.js 应用

 index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .container {
      width: 600px;
      margin: 50px auto;
   }
    table {
      width: 100%;
      text-align: center;
   }
   table thead th {
      background-color: #aaa;
   }
    table tbody td {
      background-color: #eee;
      padding: 5px
   }
    form {
      margin-bottom: 50px;
      text-align: center;
   }
    input {
      margin-bottom: 15px;
   }
    button {
      margin-left: 10px
   }
  </style>
</head>
<body>
  <div class="container">
    <!-- 新增数据的表单 -->
    <form id="form1" action="http://localhost:3030/add"  method="post">
      名称:<input type="text"  name="name"><br />
     数量:<input type="text"  name="value"><br />
      <input type="submit" value="提交" />
    </form>
    <!-- 查询数据的输入框 -->
    <input type="text" placeholder="请输入搜索的名称" id="name">
    <button onclick="onGetList()">搜索</button>
    <!-- 展示数据的列表 -->
    <table>
      <thead>
        <th>名称</th>
        <th>数量</th>
        <th>操作</th>
      </thead>
      <tbody>
      </tbody>
    </table>
  </div>
  <script>
    // 获取数据
    var onGetList = function () {
      // 获取tbody
      var tbody = document.querySelector('tbody')
      // 获取搜索框里面的内容
     const name = document.querySelector('#name').value
      // 发送获取数据的请求
      fetch('/getlist?name=' + name).then(function (data) {
        data.json().then(function (result) {
          tbody.innerHTML = null
          // 遍历返回的数据,生成每一行数据
         result.records.forEach(function (item) {
            var tr = document.createElement('tr')
            tr.innerHTML = '<td>' + item.name + '</td>' + '<td>' + item.value + '</td>'
            var td = document.createElement('td')
            var button = document.createElement('button')
            button.innerHTML = '删除'
            // 点击删除
            button.onclick = function () {
              remove(item)
           }
            td.append(button)
            tr.appendChild(td)
            tbody.appendChild(tr)
         })
       })
     })
   }
    // 删除数据
    function remove(item) {
      // 发送请求,并传递要删除数据的id
      fetch('/remove', { method: 'POST', body: JSON.stringify({ id: item.id }), headers: { 'Content-Type': 'application/json' } }).then(function (data) {
        console.log(data)
        data.json().then(function (result) {
          console.log('成功')
          onGetList()
       })
     })
   }
    window.onload = function () {
      onGetList()
   }
  </script>
</body>
</html>

 mysql.js

var mysql = require('mysql');
const sqlConfig = {
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'test'
}
let connection = mysql.createConnection(sqlConfig)
const sqlFn = function (sql, arr, callback)
{
  connection.query(sql, arr, callback)
}
module.exports = sqlFn

server.js

const http=require('http')
const router=require('./router')
http.createServer(function(req,res){
  router(req,res)
}).listen('3030')

router.js

const sqlFn = require('./index')
const url = require('url')
const querystring = require('querystring')
const fs = require('fs')
module.exports = (req, res) => {
  const { pathname, query } = url.parse(req.url, true)
  console.log(req.method)
  if (req.method == 'POST') {
    let params = ''
    req.on('data', (chunk) => {
      params += chunk
   })
    req.on('end', () => {
      console.log(params)
      let postParams = querystring.parse(params)
      if (req.headers['content-type'] == 'application/json') {
        postParams = JSON.parse(params)
     }
      // 处理新增数据的请求
      if (pathname == '/add') {
        sqlFn('insert into test(id,name,value) values (null,?,?) ',[postParams.name, postParams.value], (results) => {
          if (results.affectedRows) {
           res.writeHead(200, { "Content-Type": 'application/json;charset=utf-8' })
           res.end(JSON.stringify({ code: 0, message: '操作成功' }))
         }
        
       })
     }
      //处理删除请求
      if (pathname == '/remove') {
        console.log(postParams)
        sqlFn('delete from test where id=? ', [postParams.id], (results) => {
          if (results.affectedRows) {
            console.log('删除成功')
            res.writeHead(200, { "Content-Type": 'application/json;charset=utf-8' })
            res.end(JSON.stringify({ code: 0, message: '操作成功' }))
         }
       })
     }
   })
 }
  if (req.method == 'GET') {
    // 处理获取数据请求
    if (pathname == '/getlist') {
      sqlFn(`select * from test where ${query.name ? 'name=?' : 'name is not null'}`, [query.name], (results) => {
        console.log(results)
        res.writeHead(200, { "Content-Type": 'application/json;charset=utf-8' })
        res.write(JSON.stringify({ code: 0, records: results }))
        res.end()
     })
   }
    //处理获取html页面请求
    if (pathname == '/index.html') {
      res.writeHead(200, { "Content-Type": 'text/html;charset=utf8' })
      fs.readFile('./index.html', (err, data) => {
        res.end(data)
     })
   }
 }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/203846.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

子类拷贝构造函数会调用父类拷贝构造函数吗?

一. 编译器提供的默认子类拷贝构造函数会调用父类拷贝构造函数。 #include <iostream> #include <string> using namespace std;class Parent { public:Parent(string home_address "中国") : m_home_address(home_address) {cout << "调用…

一文让你深入了解JavaSE的知识点

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

车辆动力学 | 轮胎纵滑和侧滑下的简化模型

1、轮胎模型的定义&#xff1a; ——反应轮胎力学性能&#xff08;所有侧向力、纵向力以及会正力矩等&#xff09;与侧偏角和运动状态&#xff08;滑转率和滑移率&#xff09;关系的数学模型 2、四个组成部分 胎面层、带束层、胎体、轮辋 3、简化模型的假设条件 4、起滑点&am…

深度学习毕设项目 医学大数据分析 - 心血管疾病分析

# 1 前言 &#x1f6a9; 基于大数据的心血管疾病分析 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 1 课题背景 本项目的任务是利用患者的检查结果预测心血管疾病(CVD)的存在与否。 2 数据…

网络安全应该怎么学?(0基础小白)

一、网络安全应该怎么学&#xff1f; 1.计算机基础需要过关 这一步跟网安关系暂时不大&#xff0c;是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通&#xff0c;可以与学习其他课程同步进行。 2.渗透技…

详解云WAF:免费GOODWAF归来

文前聊心 说说这篇文章的目的&#xff1a; 介绍一下自己的开发升级的项目&#xff1a;GOODWAF&#xff0c;看名字也能看的出来这是一款防火墙&#xff0c;但它不同于现在的软件防火墙&#xff0c;它是一款云WAF防火墙。 其实GOODWAF这个IP概念前两年就存在了&#xff0c;但为什…

基于Java SSM框架+Vue实现房屋租赁网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现房屋租赁网站演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;房屋租赁系统当然也不能排除在外。房屋租赁系统是以实际运用为开发背景&…

C++模拟实现unordered_map和unordered_set

目录 1.了解哈希表 1.哈希表 1.他的实现原理就是&#xff1a; ​编辑 2.写单个数据的类型&#xff08;这边先模拟map的kv类型&#xff0c;后面会再一起改&#xff0c;这边先一步步的先简单实现他&#xff09; 3.封装整个类&#xff1a; 4.哈希表中存储string 2.哈…

Unity中Shader优化通用规则

文章目录 前言一、精度优化1、三种精度 fixed / half / float2、位置坐标、物理坐标类使用float3、HDR颜色、方向向量类使用half4、普通纹理、颜色类使用 fixed5、实际上&#xff0c;使用的精度取决于 平台 和 GPU6、现在桌面级GPU都是直接采用 float , Shader中的 fixed / hal…

【Linux】ln命令使用

ln命令 ln是linux中又一个非常重要命令&#xff0c;请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同步的链接&#xff0c;这个命令最常用的参数是-s&#xff0c;具体用法是&#xff1a;ln –s 源文件 目标文件。 当我们需要在不同的目录&#xff0c;用到相…

分享5款靠谱好用,无广告不流氓的好软件

​ 话不多说&#xff0c;直入正题&#xff0c;全都是靠谱好用&#xff0c;无广告不流氓的好软件&#xff0c;可以先点赞收藏&#xff0c;以后慢慢用。 1.动态壁纸软件——Lively Wallpaper ​ Lively Wallpaper是一款可以将视频、GIF、网页、游戏等内容作为桌面壁纸的软件&am…

移动硬盘显示容量不显示文件怎么办?五种解决方法

移动硬盘是一种常用的便携式存储设备&#xff0c;可以方便地备份和传输大量的数据文件。然而&#xff0c;有时我们可能会遇到一个问题&#xff0c;即移动硬盘显示容量不显示文件怎么办&#xff1f;本文将介绍几种解决方法&#xff0c;希望能帮助大家有效解决问题。 方法一、检…

【JavaWeb】会话过滤器监听器

会话&过滤器&监听器 文章目录 会话&过滤器&监听器一、会话1.1 Cookie1.2 Session1.3 三大域对象 二、过滤器三、监听器3.1 application域监听器3.2 session域监听器3.3 request域监听器3.4 session域的两个特殊监听器3.4.1 session绑定监听器3.4.2 钝化活化监听…

IEC60730-1 Annex-H

IEC-60730安全标准法规由国际电工委员会 ( IEC ) 制定&#xff0c;该安全标准定义了家用电器嵌入式控制软件与硬件安全操作的测试与检测方法&#xff0c;以确保家电中受控设备的安全操作。IEC-60730将家用电器分为3类&#xff1a; A类 – 不用于确保设备的安全性。 例如&#…

深入了解Java8新特性-日期时间API之TemporalQuery、TemporalQueries

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概2000多字&#xff0c;预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#x…

国外客户跟我要佣金,该给不该给?

“Jack&#xff0c;这次你要是不帮我&#xff0c;我就死定了&#xff01;” 收到美国公司采购Antony的信息时&#xff0c;我有些哭笑不得&#xff0c;因为在我电脑屏幕上除了他的信息外&#xff0c;还有来自他公司监察部门的邮件&#xff1a; “jack先生&#xff0c;我们调查…

PostgreSQL-SQL联表查询LEFT JOIN 数据去重复

我们在使用left join联表查询时&#xff0c;如果table1中的一条记录对应了table2的多条记录&#xff0c;则会重复查出id相同的多条记录。 1、解决方法一 SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 ON t1.id t2.tid 第一种方法我们发现还是有重复数据 2、解决方法二…

go elasticsearch 测试实例

// 查询列表数据 func QueryOperateList(ctx context.Context, esClient *elastic.Client, index string, pageNum, pageSize int, start, end int64, execSql string, list []interface{}, operateAccount string, operateAddr string, maxRows, minRows int, dbAddr, namespa…

版本控制系统Git学习笔记-Git基本知识介绍

目录 前言一、版本控制系统1.1 什么是版本控制系统1.2 本地版本控制系统1.3 集中化的版本控制系统1.3 分布式版本控制系统 二、Git简介2.1 数据处理方式2.2 几个特点2.2.1 几乎所有操作都是本地执行2.2.2 Git保证完整性2.2.3 Git一般只添加数据 2.3 Git中文件状态2.3.1 三种文件…