这是我第一次使用 cors 和 node.js,我尝试从另一个 URL 调用托管在一个 URL 上的 Web API。
我什至无法让 cors 简单地工作
app.use(cors());
我尝试了更复杂的配置和起源之类的,但仍然没有运气。
API 位于 https://api.example.app 上,并从 https://myapp.example.app
调用我收到各种 cors 错误。
注意,我还使用 CloudFlare 和 Nginx 代理管理器
此外,我可以访问 https://api.example.app/select 并以这种方式毫无问题地取回我的数据。但这是唯一可行的方案。
var express = require('express');
var mysql = require('mysql');
var cors = require('cors');
var app = express();
var port = 3333;
app.use(express.text());
app.use(cors());
var pool = mysql.createPool({
connectionLimit: 10,
host: '192.168.1.200',
port: 3306,
user: 'user',
password: 'password',
database: 'mydb'
});
app.get('/select', (req, res) => {
pool.query('SELECT * FROM mytable', (error, results, fields) => {
if (error) {
console.error('Error retrieving data:', error);
return res.status(500).send('Failed to retrieve data from database');
}
console.log('Data retrieved successfully:', results);
res.status(200).json(results);
});
});
app.post('/insert', (req, res) => {
var string = req.body;
console.log(req.body);
if (!string) {
return res.status(400).send('String is required');
}
pool.query('INSERT INTO mytable(user) VALUES (?)', string, (err, results) => {
if (err) {
console.error('Error inserting string into database:', err);
return res.status(500).send('Failed to insert string into database');
}
console.log('String inserted successfully');
return res.status(200).send('String inserted successfully');
});
});
app.listen(port, () => {
console.log(`Server is running on http://192.168.1.200:${port}`);
});
如果我错了,请纠正我,但我的 COR 配置不只是“app.use(cors());”据我所知,这只允许发生任何跨站点操作?
不。它将 CORS 标头添加到响应(包括飞行前请求)中。它使用默认配置,默认情况下阻止跨源请求。
您可以配置允许的来源以允许您的其他来源。
const corsOptions = {
// origin: false, //disable CORS origin checking
origin: [ //specify list of allowed origins
'https://myapp.example.app',
'https://api.example.app',
],
};
app.use(cors(corsOptions));