丘丘静 2024-06-11 20:33 采纳率: 42.9%
浏览 11

微信小程序+node.js+sqlserver,内网穿刺

我是微信小程序+node.js+sqlserver,我想通过内网穿刺小米球,然后访问本机调试到我的微信小程序

const formidable = require('formidable');
const tedious = require('tedious');
//Node.js服务器和SQL Server都在同一个内网中,那么IPAddress保持不变。内网穿刺映射
const IPAddress = '192.168.44.1';这是我的ipv4的地址
const UserName = 'ss';
const PWD = '123456';
const DBName = 'yunfu';
// 解析 application/x-www-form-urlencoded 格式请求体
app.use(bodyParser.urlencoded({ extended: true}));
app.use(express.json());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
//连接数据库
function getDatabaseConfig() {  
  return {  
    port: 1433,
    user: UserName,
    password: PWD,
    server: IPAddress,
    database: DBName,
    options: {  
      encrypt: false,  
      trustServerCertificate: true,  
      cryptoCredentialsDetails: {  
        minVersion: 'TLSv1.2',  
        sigint: 'TLS_AES_256_GCM_SHA384'  
      },  
      disableRenegotiation: true  
    },  
  };  
}  
//登录
app.post('/getUser', (req, res) => {
  const config = getDatabaseConfig(); 

  const pool = new SqlServer.ConnectionPool(config);
  const {password,sellphone} = req.body;
  pool.connect().then(() => {
    return pool.request()
    .query(`SELECT * FROM dbo.yfb WHERE sellphone = '${sellphone}' AND password = '${password}'`);
  }).then((result) => {
    if (result.recordset.length > 0) {
      res.json(result.recordset[0]); // 返回查询到的第一条数据
      console.log(result.recordset[0]);
    } else {
      res.json(null); // 查询结果为空
    }
  }).catch((err) => {
    console.error(err);
    res.status(500).send('Error retrieving data from the database.');
  }).finally(() => {
    pool.close();
  });
});
//监听端口
app.listen(3000, () => {
  console.log('Server running at http://' + IPAddress + ':3000');
});,然后我的前端我用了我的生成的http的公网地址wx.request({
      //如果是本地测试那就用http://192.168.44.1:3000/getUser
      //内网穿刺访问就用http://我的公网地址/getUser
      url: 'http://我的公网地址/getUser',
      method: 'POST',
      data: {
        sellphone: sellphone,
        password: password
      },
      success(res) {
        if (res.data) {
            // 将返回的数据存储到全局数据中
       getApp().globalData.userData = res.data;
       me.setData({
        userData: res.data // 更新页面数据
      });
     我的公网地址里面的本地服务地址:就是192.168.44.1,然后我还是没有连接到我的数据库sqlserver,我的数据库sqlserver的服务器名称也是192.168.44.1,我要怎么修改才能通过小米球内网穿刺访问到我的微信小程序加我的数据库和node.js正常运行
  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-11 20:33
    关注

    引自免费微信小程序:皆我百晓生

    要解决微信小程序通过内网穿刺访问位于私有网络中的Node.js服务器以及SQL Server数据库的问题,需要确保几个关键点:内网穿透、正确的网络配置、以及API与数据库间的正确通信。下面将逐步指导如何实现这一目标。

    1. 内网穿透(使用小米球)

    小米球是一个内网穿透工具,它允许你从互联网上访问位于私有网络中的服务。首先,你需要在你的内网环境中部署小米球,并根据其官方文档进行配置。这通常涉及到在小米球上创建一个隧道,将你内网中的服务(例如Node.js服务器)暴露给外网。具体步骤如下:

    • 下载并安装小米球客户端:确保在你的内网设备上安装了小米球客户端。
    • 配置隧道:在小米球客户端中,添加一个新的隧道配置,指定你的Node.js服务器监听的端口(例如3000),并将这个端口映射到一个公网可访问的URL和端口组合。例如,你可以设置一个映射,使得外部请求到达http://public.example.com:8080时会被转发到你内网的192.168.44.1:3000

    2. Node.js服务器配置

    你的Node.js服务器代码看起来已经准备好了接收来自微信小程序的请求,并尝试连接到SQL Server数据库。但是,你需要确保Node.js服务器的IP地址和端口号在你的内网穿透工具(小米球)中被正确映射。

    const express = require('express');
    const bodyParser = require('body-parser');
    const tedious = require('tedious');
    
    const app = express();
    
    // Use body-parser middleware to parse incoming request bodies
    app.use(bodyParser.json());
    
    // Database connection configuration
    const dbConfig = {
      authentication: {
        type: 'default',
        options: {
          userName: 'ss',
          password: '123456'
        }
      },
      server: '192.168.44.1',
      options: {
        encrypt: false,
        database: 'yunfu',
        port: 1433,
        rowCollectionOnRequestCompletion: true
      }
    };
    
    // Function to connect to SQL Server and execute query
    async function queryDatabase(query) {
      let connection;
      try {
        connection = new tedious.Connection(dbConfig);
        await new Promise((resolve, reject) => {
          connection.on('connect', resolve);
          connection.on('error', reject);
          connection.connect();
        });
    
        const request = new tedious.Request(query, (err, rowCount) => {
          if (err) {
            console.error(err);
          }
        });
    
        const result = [];
        request.on('row', (columns) => {
          columns.forEach(column => {
            result.push(column.value);
          });
        });
    
        connection.execSql(request);
    
        await new Promise(resolve => {
          connection.on('requestCompleted', resolve);
        });
    
        return result;
      } catch (err) {
        console.error('Error connecting to the database:', err);
        throw err;
      } finally {
        if (connection) {
          connection.close();
        }
      }
    }
    
    // Route for getting user information
    app.post('/getUser', async (req, res) => {
      const { sellphone, password } = req.body;
      const query = `SELECT * FROM dbo.yfb WHERE sellphone = '${sellphone}' AND password = '${password}'`;
      try {
        const result = await queryDatabase(query);
        if (result.length > 0) {
          res.json(result[0]);
        } else {
          res.json(null);
        }
      } catch (err) {
        res.status(500).send('Error retrieving data from the database.');
      }
    });
    
    // Listen on a specific port
    const PORT = 3000;
    app.listen(PORT, () => {
      console.log(`Server running at http://192.168.44.1:${PORT}`);
    });
    

    3. 微信小程序调用API

    在你的微信小程序中,你需要使用小米球提供的公网URL和端口来访问你的Node.js服务器。例如,如果你的小米球配置正确,你的请求应该像这样:

    wx.request({
      url: 'http://public.example.com:8080/getUser',
      method: 'POST',
      data: {
        sellphone: 'yourPhoneNumber',
        password: 'yourPassword'
      },
      success(res) {
        console.log(res.data);
        // Handle the response as needed
      }
    });
    

    请替换http://public.example.com:8080为小米球实际提供的公网URL和端口。

    通过上述步骤,你应该能够从微信小程序通过内网穿透访问到你的Node.js服务器,并进一步与SQL Server数据库交互。如果遇到任何问题,检查你的网络配置、小米球的隧道状态、以及Node.js服务器与数据库之间的连接是否正常。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月11日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表