You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apollo Server对接MySQL:如何直接从数据库查询文章数据并通过API返回

步骤1:安装所需依赖

安装Sequelize(对新手友好的MySQL ORM工具)和MySQL驱动:

npm install sequelize mysql2

步骤2:替换静态模型为MySQL数据库模型

原有models文件是本地静态数组,现在修改为对接MySQL的模型定义,修改models/index.js如下:

const { Sequelize, DataTypes } = require('sequelize');
// 替换为你自己的MySQL连接信息
const sequelize = new Sequelize('你的数据库名', '数据库用户名', '数据库密码', {
  host: 'localhost',
  dialect: 'mysql'
});

// 定义Article模型,字段和你原有静态数据完全对应
const Article = sequelize.define('articledata', {
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  name: DataTypes.STRING,
  description: DataTypes.STRING,
  imgs: DataTypes.STRING,
  btnLink: DataTypes.STRING,
  headline: DataTypes.STRING,
  introduction: DataTypes.TEXT,
  definition: DataTypes.TEXT,
  tutorial: DataTypes.TEXT,
  specsText: DataTypes.TEXT,
  endText: DataTypes.TEXT,
  age: DataTypes.INTEGER,
  duration: DataTypes.INTEGER,
  players: DataTypes.INTEGER,
  category: DataTypes.STRING,
  designer: DataTypes.STRING,
  language: DataTypes.STRING,
  releaseDate: DataTypes.INTEGER,
  topic: DataTypes.STRING
}, {
  tableName: 'articledata', // 对应你MySQL中的表名
  timestamps: false // 如果你表中没有createdAt、updatedAt字段需要加此配置
});

// 测试数据库连接
(async () => {
  try {
    await sequelize.authenticate();
    console.log('数据库连接成功');
    // 首次运行如果需要自动创建表可打开下方注释,运行一次后关闭即可
    // await sequelize.sync();
  } catch (error) {
    console.error('数据库连接失败:', error);
  }
})();

module.exports = { Article };

步骤3:修改Resolver逻辑

原有Resolver是查询静态数组,现在改为异步查询MySQL,修改后代码如下:

const { Article } = require('../models');

module.exports = {
    Query: {
        // 增加async关键字处理异步操作
        article: async (parent, {id}) => {
                // 按主键ID查询数据库记录
                return await Article.findByPk(id);
        }
    },

    Node: {
        __resolveType(node) {
            // 原有toObject是MongoDB方法,现在直接判断字段即可
            if(node.name){
                return 'Article';
            }
        }
    }
}

步骤4:修复index.js语法问题

原有index.js存在两处语法错误,修改后如下:

const { ApolloServer } = require('apollo-server');

const schema = require('./schema');
const resolvers = require('./resolvers');

const server = new ApolloServer({
    typeDefs: schema,
    resolvers,
    // 你当前未定义ArticleAPI,暂时删除dataSources配置避免报错,后续扩展时再补充即可
})

server.listen().then(({ url }) => {
    // 模板字符串需要用反引号包裹,不能用单引号
    console.log(`Server ready at ${url}`);
});

验证效果

启动服务后,在Apollo自带的Playground中运行如下查询,即可获取MySQL中对应ID的文章数据:

query getArticle($id: ID!) {
  article(id: $id) {
    id
    name
    description
    headline
    # 其他你需要返回的字段
  }
}
# 变量栏输入 {"id": 1} 即可查询ID为1的文章

内容的提问来源于stack exchange,提问作者Nicole Höfler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:48:01