已拦截跨源请求:同源策略禁止读取位于 file:///modify-table 的远程资源。(原因:CORS 请求不是 http)续上一篇文章的解决方法

这个错误是由于CORS(跨源资源共享)策略导致的,因为浏览器不允许前端代码从file:///协议访问http://localhost:3000。为了避免这个问题,你需要使用HTTP服务器来提供HTML文件。

你可以使用Node.js中的Express来同时提供HTML文件和处理API请求。以下是完整的示例,包括提供HTML文件的部分。

1.创建项目目录结构

project

├── server.js

└── public

└── index.html

2.修改 server.js 文件

javascript 复制代码
const express = require('express');
const mysql = require('mysql');
const bodyParser = require('body-parser');
const path = require('path');
const app = express();

app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'public'))); // 设置静态文件目录

// 配置MySQL连接
const db = mysql.createConnection({
    host: 'localhost',
    user: 'your_username',
    password: 'your_password',
    database: 'your_database'
});

// 连接到MySQL
db.connect((err) => {
    if (err) {
        throw err;
    }
    console.log('MySQL connected...');
});

// 创建一个简单的API来处理数据库操作
app.post('/modify-table', (req, res) => {
    let sql = req.body.query;
    db.query(sql, (err, result) => {
        if (err) {
            res.status(500).send(err);
        }
        res.send(result);
    });
});

// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server started on port ${PORT}`);
});

3. 创建 public/index.html 文件

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Modify MySQL Table</title>
</head>
<body>
    <h1>Modify MySQL Table</h1>
    <form id="query-form">
        <textarea id="query" placeholder="Enter SQL query" rows="4" cols="50"></textarea><br>
        <button type="submit">Submit</button>
    </form>
    <div id="result"></div>

    <script>
        document.getElementById('query-form').addEventListener('submit', function (e) {
            e.preventDefault();
            const query = document.getElementById('query').value;
            fetch('/modify-table', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({ query })
            })
            .then(response => response.json())
            .then(data => {
                document.getElementById('result').textContent = JSON.stringify(data, null, 2);
            })
            .catch(error => {
                document.getElementById('result').textContent = 'Error: ' + error;
            });
        });
    </script>
</body>
</html>

4. 启动Node.js服务器

在项目根目录下运行:

html 复制代码
node server.js

5. 访问页面

打开浏览器,访问http://localhost:3000。现在你应该能够正确地通过表单发送请求并修改MySQL数据库。

备注

  • 确保MySQL服务器正在运行,并且你有一个可用的数据库。
  • your_usernameyour_passwordyour_database替换为实际的MySQL凭据。

这种方法使用了Node.js服务器来提供HTML文件,从而避免了CORS问题。确保在实际应用中加入适当的安全验证和权限控制,以防止SQL注入和其他安全问题。

相关推荐
小米渣的逆袭35 分钟前
Chrome Extension Script World(ISOLATED / MAIN)原理与适用场景
前端·javascript·chrome
想你依然心痛1 小时前
RT-Thread组件生态:SAL网络框架与AT组件实战——网络抽象、AT指令
网络·arm开发·at·sal
2401_841585181 小时前
防破 · 稳定 · 易用——文心云网络验证,为您的软件商业化保驾护航
网络
星恒讯工业路由器1 小时前
公网IP、NAT、端口映射:外网访问家里的“通关攻略”
网络·智能路由器·信息与通信·nat·端口映射·公网ip
小蜗牛的路1 小时前
使用OpenSSL生成本地证书https+nginx
网络协议·nginx·https
Esaka_Forever1 小时前
Python 与 JS (V8) 垃圾回收核心区别 + 底层根源分析
开发语言·javascript·jvm
林希_Rachel_傻希希2 小时前
web性能优化之——AI总结视频
前端·javascript·面试
前端炒粉2 小时前
个人简历面经总结二
前端·网络·vue.js·react.js·面试
binbin_522 小时前
UIAbility 与 WindowStage:窗口创建、加载、销毁的完整链路
开发语言·javascript·深度学习·华为·harmonyos
weedsfly2 小时前
Cookie 安全三属性:HttpOnly、Secure、SameSite 分别防什么?
前端·javascript·面试