部署在 Vercel 上时连接到远程数据库
Connect to remote database when deployed on Vercel
在我的 NextJS Vercel 应用程序中,在关注 Vercel's official tutorial.
之后,我无法成功连接到位于 GoDaddy 上的远程 MySQL 数据库
我希望 api 页面到 return JSON 数据库查询产生的数据。相反,我得到
我尝试更改用户名,但出于某种原因,我拥有的 4 个环境变量 - MYSQL_USER、MYSQL_DATABASE、MYSQL_HOST 和 MYSQL_PASSWORD - 从来没有在现场更新!我在 Production、Preview 甚至 Development 中进行了更改,它们在上面 link 的对象中保持不变。
我的 localhost
一切正常,因为我的家庭 IP 地址在 cPanel 中列入了白名单。但是 Vercel 有动态 IP,所以我不能在实时站点上执行此操作。如果我在 GoDaddy 上托管它也可以正常工作,但我需要在 Vercel 上托管。
这是我连接到数据库的 db.js 文件的源代码
lib/db.js
const mysql = require('serverless-mysql');
const db = mysql({
config: {
host: process.env.MYSQL_HOST,
database: process.env.MYSQL_DATABASE,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
}
})
exports.query = async query => {
try {
const results = await db.query(query);
await db.end();
return results
} catch (error) {
return {
error
}
}
}
pages/api/columns/index.js
const db = require('../../../lib/db')
const escape = require('sql-template-strings')
/**
* Queries the database to return the newspaper's columns
* @param {IncomingMessage} _req The request object (unused)
* @param {ServerResponse} res The response object
*/
module.exports = async (_req, res) => {
const columns = await db.query(escape`SELECT * FROM columns ORDER BY id`);
res.status(200).json({ columns })
}
我希望这个结果出现在本地:
连接到远程数据库仅适用于云托管(例如 Microsoft Azure、AWS)。因为我使用的是托管服务,所以这行不通。
在远程MySQL,白名单%.%.%.%
。因为 Vercel 的 IP 是动态的,所以这将允许 Vercel 和数据库之间的一致连接。这也是一个安全风险,但我有密码保护。
在我的 NextJS Vercel 应用程序中,在关注 Vercel's official tutorial.
之后,我无法成功连接到位于 GoDaddy 上的远程 MySQL 数据库我希望 api 页面到 return JSON 数据库查询产生的数据。相反,我得到
我尝试更改用户名,但出于某种原因,我拥有的 4 个环境变量 - MYSQL_USER、MYSQL_DATABASE、MYSQL_HOST 和 MYSQL_PASSWORD - 从来没有在现场更新!我在 Production、Preview 甚至 Development 中进行了更改,它们在上面 link 的对象中保持不变。
我的 localhost
一切正常,因为我的家庭 IP 地址在 cPanel 中列入了白名单。但是 Vercel 有动态 IP,所以我不能在实时站点上执行此操作。如果我在 GoDaddy 上托管它也可以正常工作,但我需要在 Vercel 上托管。
这是我连接到数据库的 db.js 文件的源代码
lib/db.js
const mysql = require('serverless-mysql');
const db = mysql({
config: {
host: process.env.MYSQL_HOST,
database: process.env.MYSQL_DATABASE,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
}
})
exports.query = async query => {
try {
const results = await db.query(query);
await db.end();
return results
} catch (error) {
return {
error
}
}
}
pages/api/columns/index.js
const db = require('../../../lib/db')
const escape = require('sql-template-strings')
/**
* Queries the database to return the newspaper's columns
* @param {IncomingMessage} _req The request object (unused)
* @param {ServerResponse} res The response object
*/
module.exports = async (_req, res) => {
const columns = await db.query(escape`SELECT * FROM columns ORDER BY id`);
res.status(200).json({ columns })
}
我希望这个结果出现在本地:
连接到远程数据库仅适用于云托管(例如 Microsoft Azure、AWS)。因为我使用的是托管服务,所以这行不通。
在远程MySQL,白名单%.%.%.%
。因为 Vercel 的 IP 是动态的,所以这将允许 Vercel 和数据库之间的一致连接。这也是一个安全风险,但我有密码保护。