Node连接MySql返回数据给Https协议网站为什么不显示

一路踩坑过来。

其实node连接MySql返回数据给拥有https协议的网站,出错不显示的原因很简单:

因为证书验证不通过,Node发出的数据包没带上 ssl证书.

这里的话我用的是阿里云服务器,在阿里云的 SSL证书(应用安全) 中申请的免费证书。 -----这是关键

在写好后在服务器切换到目录,node app.js 执行

 

同时在本地可打开路径,index.html主页的内容等会我会放在最下方。

下载express,这里我们使用express来搭建服务,结合数据库来完成完整的前后端业务

npm i express      //引入express      

npm i mysql      //引入mysql      

npm i body-parser   //解决post参数问题

 

新建app.js文件(可随意命名) 代码如下:写好后在服务器运行 Node app.js 

     var express = require('express');   //引入express
        var app = express();   
        //注册成app(这里也可以应用路由中间件 var router = express.Router(),接着在写接口时,将app替换为router)
        var bodyParser = require('body-parser'); //引入插件包,解决post请求参数问题
        app.use(bodyParser.json());
        app.use(bodyParser.urlencoded({
        extended: true
        }));

        var mysql = require('mysql'); //引入数据库插件包
        var connection = mysql.createConnection({ //填写数据库的信息
            host: ***.**.***.16', //域名  Amayaliu.cn
            user: 'root', //用户
            password: '**********',   //密码
            database: 'Amayaliu.cn',   //数据库的名称 记得换
        });

        var https = require('https'),fs = require("fs");

        var options = {
            //下载的nginx版的,记得替换成自己的  有一些自己配置生成的ssl貌似会被阻止
            key: fs.readFileSync('./***********.key'),
            cert: fs.readFileSync('./************.pem')
        };

        connection.connect();  //连接数据库(在这里的操作和php类似,学过php的朋友应该很简单)

        //设置跨域访问
        app.all('*', function (req, res, next) {   
            //设置全局的全域问题,我这里是把所有的全部允许了,
            //如果不怕麻烦或者业务需求,你也可以在请求里面写对应的跨域问题
            res.header("Access-Control-Allow-Origin", "*");
            res.header("Access-Control-Allow-Headers", "X-Requested-With");
            res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
            res.header("X-Powered-By", ' 3.2.1');
            res.header("Content-Type", "application/json;charset=utf-8");
            next();
        });

        //查询接口
        app.get('/weblist', function (req, res) {
            //写对应的你需要操作的sql语句,
            var sql = "select * from weblist" 

            //执行mysql语句,访问数据库
            connection.query(sql, function (error, result, fields) {
                res.send(result)
                //将结果返回(这里的数据我们可以进行响应的判断和包装返回给前端)
            })
        });

        //监听服务端口
        https.createServer(options, app).listen(3000, function () {
            console.log('Https server listening on port ' + 3000);
        });

新建index.html文件(可随意命名) 代码如下: 写好后放于服务器https对应的目录

<!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        </head>
        <body>
        <div id="op"></div>

        <script src="https://cdn.bootcss.com/jquery/1.8.3/jquery.js"></script>
        <script>
            $(function(){
                $.ajax({
                    type:'get',
                    url:'https://amayaliu.cn:3000/weblist',//地址替换成自己的https网站
                    success:function(data){
                        $("#op").html(data[0].name);
                    },error:function(){
                        console.log('error')
                    }
                })
            })
        </script>
        </body>
        </html>

 

posted @ 2019-05-28 17:43  Amayaliu  阅读(2707)  评论(0编辑  收藏  举报