系列文章目录
提示:node基础, 系统模块,第三方模块,node.js 对数据库的操作(增删改查).使用node实现对列表简单的增删改查功能,博客项目连接数据库,博客项目前端
文章目录
- 系列文章目录
- 前言
- 一.node.js 是什么?
- 二.Node 入门
- 三.系统模块
- 四.第三方模块
- 五.node.js 对数据库的操作(增删改查)
- 六.使用node实现对列表简单的增删改查功能
- 七.博客项目_连接数据库(后端)
- 八.博客项目_前端实现
- 总结
前言
大家好呢,今天 一起 学习一下node.js. node.js 是一个基于 javascript 这门语言而开发出来的技术,本文就介绍了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提供了大量能使我们快速便捷地处理逻辑的方法。