【无标题】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

例如: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>

运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值