提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
nodejs
前言
提示:这里可以添加本文要记录的大概内容:
例如:node可以用js写后端代码。
提示:以下是本篇文章正文内容,下面案例可供参考
一、mysql模块执行sql语句
代码如下(示例):
//1.引入mysql模块
const mysql = require("mysql")
//2.创建mysql链接
var con = mysql.createConnection({
//2.1 链接数据库
//2.2数据库的地址
host:"localhost",
//2.3数据库名
database:"test_user",
//2.4数据库用户名
user:"admin123",
//2.4数据库密码
password:"admin123"
})
//链接数据库
con.connect((err)=>{
if(err){
console.log("数据库链接失败");
}else{
console.log("数据库链接成功");
}
})
//4、使用sql语句查询数据库
//con.query(sql语句字符串,回调函数)
con.query('select * from user',(error,res)=>{
//error为null的时候 证明sql语句执行成功了 否则就失败了
//如果error不为空 那么error的回调信息就是sql语句的错误信息
console.log(error);
if(error == "null"){
console.log(error);
}else{
console.log(res);
}
//执行sql语句要断开sql链接
con.end()
})
二、http请求到mysql
// 1.引入http模块
const http = require('http');
// 2.创建server服务
const server = http.createServer();
// 3.监听请求
//req第一个参数用来处理一些回应消息的
//res服务端向客户端响应一些api
server.on('request',(req,res) => {
// 相应格式 设置请求头
res.setHeader('content-type','text/html;charset=utf-8');
// 每次请求都访问数据库
// 3.1引入mysql数据库模块
const mysql = require('mysql');
// 3.2创建mysql连接
const con = mysql.createConnection({
// 数据库地址
host: 'localhost',
// 数据库名称
database:'test_user',
// 数据库用户名
user:'admin123',
// 数据库密码
password:'admin123'
})
// 3.3 启动连接
con.connect();
// 3.4 查询sql语句
con.query('select * from user',(error,result)=>{
if(error){
res.end('数据库查询失败原因:' + error);
}else{
// 返回参数
res.end(JSON.stringify(result));
}
// 关闭数据库连接
con.end();
})
})
// 4.启动服务
server.listen(8080,'127.0.0.1',()=>{
console.log('服务启动成功,地址是http://127.0.0.1:8080/');
})
三、jsonp解决跨域问题
网址后面jsonpCallBack的指向哪里
1.先指向后端 jsonpCallBack 返回的结果
2.再在前端使用这个方法


3.1 这个是前端访问 后端代码 需要自己写js请求数据库的后端代码
<!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>
</head>
<body>
</body>
<script>
/*
同元策略:ip相同 端口号相同 同一浏览器
解决跨域的两种方案
1.jsonp形式
原理:
是前端使用script的src属性进行创建标签
这个是不存在跨域的,但是并不能通过前端技术拿到数据
*/
//1、首先先创建一个script标签
let script = document.createElement('script');
//2、给script标签添加一个属性
script.src="http://127.0.0.1:8080/?call=jsonpCallBack";
//3、将创建好的标签加入到body里面
document.body.appendChild(script);
//4、当script数据请求完成 onload 只能在body中使用,一旦完全加载所有内容(包括图像、脚本文件、CSS 文件等),就执行一段脚本。
script.onload = function (){
var data = window.jsonpCallBack()
//打印数据
console.log(data);
}
</script>
</html>
四、后端允许所有跨域请求
1、这个是前端文件
// 1.引入http模块
const http = require('http');
// 2.创建server服务
const server = http.createServer();
// 3.监听请求
//req第一个参数用来处理一些回应消息的
//res服务端向客户端响应一些api
server.on('request',(req,res) => {
// 相应格式 设置请求头
res.setHeader('content-type','text/html;charset=utf-8');
//允许所有的跨域请求
// res.writeHead(响应的状态码200代表成功,"响应的头部" )
res.writeHead(200,{
//cors头,允许跨域,放行所有请求
/*
代表 允许所有的ip跨域请求
*/
"access-control-allow-origin":"*"
})
// 每次请求都访问数据库
// 3.1引入mysql数据库模块
const mysql = require('mysql');
// 3.2创建mysql连接
const con = mysql.createConnection({
// 数据库地址
host: 'localhost',
// 数据库名称
database:'test_user',
// 数据库用户名
user:'admin123',
// 数据库密码
password:'admin123'
})
// 3.3 启动连接
con.connect();
// 3.4 查询sql语句
con.query('select * from user',(error,result)=>{
if(error){
res.end('数据库查询失败原因:' + error);
}else{
// 返回参数
res.end(
JSON.stringify(result)
);
}
// 关闭数据库连接
con.end();
})
})
// 4.启动服务
server.listen(8080,'127.0.0.1',()=>{
console.log('服务启动成功,地址是http://127.0.0.1:8080/');
})
2、这个是后端文件
<!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>
</head>
<body>
</body>
<script>
let ajax = new XMLHttpRequest();
ajax.open('get',"http://127.0.0.1:8080/")
ajax.send();
ajax.onreadystatechange=function(res){
//判断最后一次握手
if(res.currentTarget.readyState == 4 && res.currentTarget.status == 200){
//参数处理
try{
let data = JSON.parse(res.currentTarget.response);
console.log(data);
}catch(error){
console.log(error);
}
}
}
</script>
</html>
五、try…catch
try catch 错误处理;
执行规则:首先执行try中的代码 如果抛出异常会由catch去捕获并执行 如果没有发生异常 catch去捕获会被忽略掉 但是不管有没有异常最后都会执行。try 语句使你能够测试代码块中的错误。
catch 语句允许你处理错误。
try{
代码块;
代码 throw"字符" //抛出错误
}catch(参数){ //抓住throw抛出的错误
//处理错误并执行
}
六、通过不同接口访问不同方法
1、get应用场景

2、获取到前端发送给后端的参数
//引入http模块
let http = require('http');
//床架server
let server = http.createServer();
//监听请求
server.on('request',(req,res)=>{
//req第一个参数用来处理一些回应消息的
//res服务端向客户端响应一些api
res.setHeader('content-type','text/html;charset=utf-8');
// res.writeHead(响应的状态码200代表成功,"响应的头部" )
res.writeHead(200,{
//cors头,允许跨域,放行所有请求
/*
代表 允许所有的ip跨域请求
*/
"access-control-allow-origin":"*"
})
if(req.url.indexOf('register') != -1){
let url = req.url;
url = url.split('?')[1];
url = url.split('&')
let obj = {}
url.forEach(item=>{
obj[item.split('=')[0]] = item.split('=')[1]
})
/*
结果会变成字符串 需要把前面的字符串删除
res.end('前端发送的参数是' + JSON.stringify(obj))
*/
res.end(JSON.stringify(obj))
console.log(req.url);
}else{
res.end('访问了查询接口')
}
})
//启动服务
server.listen('8080','127.0.0.1',()=>{
console.log("服务器启动成功,地址是http://127.0.0.1:8080/register");
})
3、ajax将前端的参数发送给后端
3.1介绍 Event.currentTarget 与 Event.target ?
Event.currentTarget:Event 接口的只读属性 currentTarget 表示的,标识是当事件沿着 DOM 触发时事件的当前目标。它总是指向事件绑定的元素,而 Event.target 则是事件触发的元素。
Event.target:触发事件的对象 (某个DOM元素) 的引用。当事件处理程序在事件的冒泡或捕获阶段被调用时,它与 event.currentTarget 不同。
3.2后端代码
//引入http模块
let http = require('http');
//床架server
let server = http.createServer();
//监听请求
server.on('request',(req,res)=>{
//req第一个参数用来处理一些回应消息的
//res服务端向客户端响应一些api
res.setHeader('content-type','text/html;charset=utf-8');
// res.writeHead(响应的状态码200代表成功,"响应的头部" )
res.writeHead(200,{
//cors头,允许跨域,放行所有请求
/*
代表 允许所有的ip跨域请求
*/
"access-control-allow-origin":"*"
})
if(req.url.indexOf('register') != -1){
let url = req.url;
url = url.split('?')[1];
url = url.split('&')
let obj = {}
url.forEach(item=>{
obj[item.split('=')[0]] = item.split('=')[1]
})
/*
结果会变成字符串 需要把前面的字符串删除
res.end('前端发送的参数是' + JSON.stringify(obj))
*/
res.end(JSON.stringify(obj))
console.log(req.url);
}else{
res.end('访问了查询接口')
}
})
//启动服务
server.listen('8080','127.0.0.1',()=>{
console.log("服务器启动成功,地址是http://127.0.0.1:8080/register");
})
3.3、前端代码
<!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>
</head>
<body>
</body>
<script>
/*get请求需要把前端要发送给后端的参数,写在请求的地址里面
地址/接口路径?参数1=参数值1&参数2=参数值2&参数3=参数值3
*/
let ajax = new XMLHttpRequest();
ajax.open('get','http://127.0.0.1:8080/register?userName=admin123&userPassword=admin123&nickName=%E4%BD%BF%E7%94%A8get%E8%AF%B7%E6%B1%82&sex=%E7%94%B7')
ajax.send();
ajax.onreadystatechange = function({currentTarget}){
//可以使用对象的解构function(res) res是一个对象
if(currentTarget.readyState == 4 && currentTarget.status === 200){
try {
let data = JSON.parse(currentTarget.response)
console.log(data);
} catch (error) {
console.log(currentTarget.response);
}
}
}
</script>
</html>
3.4 前端通过ajax传递参数插入到后端数据库
后端代码
// 引入http模块
let http = require('http');
// 创建srever
let server = http.createServer();
// 监听请求
server.on('request', (req,res)=>{
// 相应格式
res.setHeader('content-type','text/html;charset=utf-8');
// 允许跨域
res.writeHead(200, {
// cors头,允许跨域,放行所有请求
"access-control-allow-origin":"*"
})
if(req.url.indexOf('register') != -1){
let url = req.url;
url = url.split('?')[1];
url = url.split('&');
let obj = {};
url.forEach(item => {
// decodeURIComponent 中文被编码转换为中文
obj[item.split('=')[0]] = decodeURIComponent(item.split('=')[1])
});
//引入mysql模块
const mysql = require("mysql");
//创建mysql链接
const con = mysql.createConnection({
host:"localhost",
database:"test_user",
user:"admin123",
password:"admin123"
})
con.connect();
//查询slq语句
let sql = `insert into user (username,userPassword,nickName,sex,headimg,createTime) values ("${obj.username}","${obj.userPassword}","${obj.nickName}","${obj.sex}","null","${Date.now()}")`
con.query(sql,(error,result)=>{
if(error){
res.end('语句执行失败'+ error)
}else{
res.end(
JSON.stringify(result)
)
}
})
res.end(
JSON.stringify(obj)
)
}else{
res.end('访问了查询接口')
}
})
// 启动服务
server.listen('8080','127.0.0.1',()=>{
console.log('服务启动成功,地址是:http://127.0.0.1:8080/');
})
前端代码
<!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>
</head>
<body>
</body>
<script>
/*get请求需要把前端要发送给后端的参数,写在请求的地址里面
地址/接口路径?参数1=参数值1&参数2=参数值2&参数3=参数值3
*/
let ajax = new XMLHttpRequest();
ajax.open('get','http://127.0.0.1:8080/register?userName=admin123&userPassword=admin123&nickName=使用get请求&sex=男')
ajax.send();
ajax.onreadystatechange = function({currentTarget}){
//可以使用对象的解构function(res) res是一个对象
if(currentTarget.readyState == 4 && currentTarget.status === 200){
try {
let data = JSON.parse(currentTarget.response)
console.log(data);
} catch (error) {
console.log(currentTarget.response);
}
}
}
</script>
</html>
运行结果

8818

被折叠的 条评论
为什么被折叠?



