使用 Apollo Server 可快速构建 Node.js GraphQL 服务器,先初始化项目并安装 express、apollo-server-express 和 graphql 依赖,接着定义 User 类型和查询的 schema,编写返回模拟数据的解析器,然后在 Express 应用中启动 Apollo Server 并监听端口,最后通过访问 /graphql 在 Playground 测试 users 和 user 查询,逐步可扩展功能至生产环境。

构建一个基于 Node.js 的 GraphQL API 服务器并不复杂。你可以使用 Express 搭配 graphql 和 express-graphql 来快速搭建,或者选择更现代的方案如 Apollo Server。下面以 Apollo Server 为例,一步步带你实现。
初始化项目
创建项目目录并初始化 npm:
mkdir my-graphql-server
cd my-graphql-server
npm init -y
安装必要的依赖:
npm install express apollo-server-express graphql
定义 GraphQL Schema 和解析器
创建一个简单的用户查询示例。新建 index.js 文件:
先定义 schema(类型系统):
const { ApolloServer, gql } = require(‘apollo-server-express’);
// 定义 GraphQL 类型
const typeDefs = gql`
type User {
id: ID!
name: String!
email: String!
}
type Query {
users: [User]
user(id: ID!): User
}
`;
然后编写解析器逻辑:
// 模拟数据
const users = [
{ id: ‘1’, name: ‘Alice’, email: ‘alice@example.com’ },
{ id: ‘2’, name: ‘Bob’, email: ‘bob@example.com’ }
];
const resolvers = {
Query: {
users: () => users,
user: (parent, { id }) => users.find(u => u.id === id)
}
};
启动服务器
继续在 index.js 中集成 Express 与 Apollo Server:
const express = require(‘express’);
const { ApolloServer } = require(‘apollo-server-express’);
async function startServer() {
const app = express();
const server = new ApolloServer({ typeDefs, resolvers });
await server.start();
server.applyMiddleware({ app });
const PORT = process.env.PORT || 4000;
app.listen(PORT, () => {
console.log(`? Server ready at http://localhost:${PORT}${server.graphqlPath}`);
});
}
startServer();
运行服务:
node index.js
打开浏览器访问 http://localhost:4000/graphql,即可使用 GraphQL Playground 测试接口。
测试你的 API
在 Playground 中输入以下查询:
{ users { id name email }}
你会得到 JSON 格式的用户列表响应。也可以按 ID 查询单个用户:
{ user(id: “1”) { name email }}基本上就这些。你可以逐步扩展 schema,加入 Mutation、认证、数据库连接等功能。Apollo Server 提供了良好的扩展性,适合从原型到生产环境的过渡。
以上就是如何用Node.js构建一个GraphQL API服务器?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1526095.html
微信扫一扫
支付宝扫一扫