node.js详解+案例

47 篇文章 0 订阅

系列文章目录

提示:node基础, 系统模块,第三方模块,node.js 对数据库的操作(增删改查).使用node实现对列表简单的增删改查功能,博客项目连接数据库,博客项目前端

在这里插入图片描述


文章目录


前言

大家好呢,今天 一起 学习一下node.js. node.js 是一个基于 javascript 这门语言而开发出来的技术,本文就介绍了node.js学习的基础内容。

在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一.node.js 是什么?

node.js官网
node.js中文网

学习 Node.js 不是学习一种新的语言,而是一门技术

二.Node 入门

2.1 node 组成

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


2.2 node运行

node是基于javascript来使用的,所以node文件的后缀名都是 .js
退出运行的方法:crtl c 运行文件:

node 文件名.js 

三.系统模块

3.1 什么是系统模块

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


3.2 文件操作

同步读取

  • 语法:

    var fs=require(‘fs’)
    var res=fs.readFileSync(’./kl.txt’,‘utf8’)
    console.log(res);

  • 案例:

    //引入系统模块
    const http = require (‘http’)
    const fs =require(‘fs’);
    //创建http服务
    const app = http.createServer()
    //客户请求 ,给予响应
    app.on(‘request’,function(req,res){
    console.log(req.url);
    if(req.url==‘index’ || req.url==’/’){
    let result = fs.readFileSync(‘html/index.html’,‘utf8’)
    res.end(result)
    }else if(req.url == ‘/order’){
    let result = fs.readFileSync(‘html/order.html’,‘utf8’)
    res.end(result)
    }else if(req.url==’/my’){
    let result = fs.readFileSync(‘html/my.html’,‘utf8’)
    res.end(result)
    }else if (req.url ==‘add’){
    let result = fs.readFileSync(‘html/add.html’,‘utf8’)
    res.end(result)

    }else{
        let result = fs.readFileSync('html/error.html','utf8')
        res.end(result)
    }
    

    })
    //启动
    app.listen(3001,function(){
    console.log(‘server is running at http://127.0.0.1:3001’)
    })

异步读取

const fs=require('fs')
fs.readyFile('kl.txt','utf8',function(err,data){})
或
fs.readFile('kl.txt','utf8',(err,data)=>{
    console.log(err)
    console.log(data)
})

3.3 写入文件

语法

fs.writeFile()

案例

const fs = require('fs')
fs.writeFile('./kl..txt', 'hello', err => {
    if (err) throw err;
    console.log('文件写入成功')
})

回调函数参数为一个的,可以省略()


四.第三方模块

4.1. 如何获取第三方模块(其他开发者开发的模块叫第三方模块)

下载和卸载第三方模块
下载:npm install 模块名称
卸载:npm unintall package 模块名称


4.2. 本地安装和全局安装

  • 本地安装:(模块当前项目使用)

    npm install jquery

    npm uninstall jquery

  • 全局安装:模块被下载全局目录下,所有项目都可以使用

    npm install nodemon -g

    npm uninstall nodemon -g


4.3安装慢怎么办

原因:

  • :nodejs.com 在国外服务器上

解决:

  • 安装nrm,通过nrm更换下载源,更换之后,任然使用npm命令安装模块
  • 安装cnpm,使用cnpm安装模块

nrm使用:

  • 使用npm install nrm -g 下载
  • 查询 nrm ls
  • 切换下载地址 nrm use
  • 下载模块 npm install 模块名称

在这里插入图片描述
cnpm 使用:

使用npm安装 cnpm,同时更换所需下载源

  • npm install -g cnpm --registry-http://registry.npm.taobao.org

安装成功后,使用cnpm命令安装第三方模块

  • cnpm install jquery

4.4如果安装不成功报一个 错误:在此系统上禁止运行脚本则需要在Windows PowerShell修改执行策略。

第一步:Start-Process powershell -Verb runAs(以管理员的方式打开)

在这里插入图片描述

第二步:从普通模式转至管理员模式,输入以下set-ExecutionPolicy RemoteSigned命令然后按下回车键。
在这里插入图片描述
输入:Y 或者A 就可以了


五.node.js 对数据库的操作(增删改查)

//const 声明 
//require 引入
const  mysql=require('mysql');

let pool = mysql.createPool({
    host     : 'localhost',
    user     : 'root',
    password : 'root',
    database : 'blog'
})

pool.getConnection((err,connection)=>{
    if (err) throw err;
    let uname='root';
    let upwd='root';
    let sql="SELECT * FROM aa ";
    connection.query(sql,[uname,upwd],(err,result,fields)=>{
        if(result.length>0){
            console.log("登录成功");
        }else{
            console.log("登录失败");
        }
    })
    connection.release();
})

//insert
    let username = '小明';
    let people = '小张';
    let score = '100'
let sql2 = "INSERT INTO people (username,people,score) VALUE(?,?,?)";
pool.query(sql2,[username,people,score],(err, result, fields)=>{
    if (result.length > 0) {
        console.log(result);
    } else {
        console.log(result);
    }
})

六.使用node实现对列表简单的增删改查功能

在这里插入图片描述
//html
在这里插入图片描述

//api.js
在这里插入图片描述
//编辑页

      <script>
        // 获取传递过来的博客 id 的值
        let id = window.location.search.split("=")[1];
        http_get("/api/blog?id=" + id, (data) => {
          let json = JSON.parse(data);
          document.querySelector("#title").value = json.title;
        });

        document.querySelector(".btn").addEventListener("click", () => {
          let params = {
            id: id,
            title: document.querySelector("#title").value,
          };

          http_post("/api/edite", params, (data) => {
            if (data == "success") {
              window.location.href = "index.html";
            }
          });
        });
      </script>

七.博客项目_连接数据库(后端)

controller

//引入mysql
const { exec } = require("../db/mysql");
const { SuccessModel } = require("../model/resModel");
// 博客列表
const getList = () => {
  return exec("select * from blog");
};
// 博客详情
const getDetail = (id) => {
  let msgResult= exec("select * from blog where id=" + id);
  return msgResult.then((data) => {
    return new SuccessModel('',data)
  });
};
// 新增数据
const newBlog = function (blogData) {
  console.log(blogData);
  let sql = `insert into blog values(null,'${blogData.title}','${
    blogData.content
  }',${Date.now()},'${blogData.author}')`;
  let result = exec(sql);
  return result.then((data) => {
    return data.insertId;
  });
};
/**
 * 更新博客
 */
const updateBlog = (id, postData) => {
  let sql = `update blog set title='${postData.title}',content='${postData.content}' where id=${id}`;
  let result = exec(sql);
  return result.then((data) => {
  /*
  *三元表达式   data.affectedRows 如果==1 那么返回true否则返回false
  */
    return data.affectedRows == 1 ? true : false;
  });
};
// 删除博客(根据id删除)
const deleteBlog = (id) => {
  let sql = `delete from blog where id=${id}`;
  let result = exec(sql);
  return result.then((data) => {
    return data.affectedRows == 1 ? true : false;
  });
};

//暴露
module.exports = {
  getList,
  getDetail,
  newBlog,
  updateBlog,
  deleteBlog,
};

router

/**
 * 路由文件:接受用户的请求,并进行返回数据
 */
// 引入blog 控制器
const {
  getList,
  getDetail,
  newBlog,
  updateBlog,
  deleteBlog,
} = require("../controller/blog");
const { SuccessModel, ErrorModel } = require("../model/resModel");
const handlerBlog = (req) => {
  // 使用 URL 模块对 req.url 进行封装
  let myUrl = new URL(req.url, "http://127.0.0.1:3000/");
  let method = req.method;
  let pathname = myUrl.pathname;

  // console.log(pathname);
  let msgResult = null;
  if (pathname == "/api/blog/list" && method == "GET") {
    msgResult = getList();
    // then 方法的返回值也是一个 promise
    return msgResult.then((data) => {
      return new SuccessModel("", data);
    });
  } else if (pathname == "/api/blog/detail" && method == "GET") {
    let id = myUrl.searchParams.get("id");
    msgResult = getDetail(id);
    return msgResult.then((data) => {
      return new SuccessModel("", data);
    });
  } else if (pathname == "/api/blog/new" && method == "POST") {
    msgResult = newBlog(req.body);
    return msgResult.then((data) => {
      return new SuccessModel("", data);
    });
  } else if (pathname == "/api/blog/update" && method == "POST") {
    let id = myUrl.searchParams.get("id");
    let postData = req.body;
    msgResult = updateBlog(id, postData);
    return msgResult.then((data) => {
      return new SuccessModel("", data);
    });
  } else if (pathname == "/api/blog/del" && method == "POST") {
    let id = myUrl.searchParams.get("id");
    msgResult = deleteBlog(id);
    return msgResult.then((data) => {
      return new SuccessModel("", data);
    });
  }
  return msgResult;
};
// 暴漏 handlerBlog 方法
module.exports = {
  handlerBlog,
};

mysql

const mysql = require("mysql");
// 创建链接
const con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "root",
  port: 3306,
  //数据库名
  database: "blog3",
});
// 打开链接
con.connect();
const exec = (sql) => {
  return new Promise((resolve, reject) => {
    con.query(sql, (err, result) => {
      if (err) {
        reject("执行sql语句失败");
        return;
      }
      resolve(result);
    });
  });
};
module.exports={
    exec
}

在postman中运行(测试)

在这里插入图片描述

八.博客项目_前端实现

在这里插入图片描述

在这里插入图片描述

<script>
      fetch("http://127.0.0.1:3000/api/blog/list",{
        credentials: 'omit'
      })
        .then((response) => {
          return response.json();
        })
        
        .then((data) => {
            console.log();
          data.data.forEach((item) => {
            console.log(item)
            let li = `
            <div class="article-list-item-mp">
                  <div class="list-item-title">
                    <p class="article-list-item-txt">
                      <a href="./detail.html?id=${item.id}" class="title_"                          target="_blank" title="编辑">${item.title}</a>
          ·
          ·
          ·
          ·
              `;
            document.querySelector(".right_content").insertAdjacentHTML("afterbegin", li);
          });
        });
    </script>

总结

提示:这里对文章进行总结:
例如:以上就是本次的内容啦,本文简单介绍了node.js的使用,而node.js提供了大量能使我们快速便捷地处理逻辑的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值