将 Node JS 代码迁移到 Apollo 服务器
Posted
技术标签:
【中文标题】将 Node JS 代码迁移到 Apollo 服务器【英文标题】:Migrating Node JS code to Apollo server 【发布时间】:2018-07-18 06:32:25 【问题描述】:我正在我的 Node 应用程序上设置 Apollo Server,并且想知道将功能转移到 Apollo。
我有这样的业务逻辑:
router.post(
'/login',
(req, res, next) =>
if (!req.body.email || !req.body.password)
return 'You must send the username and the password.';
Users.findOne( email: req.body.email )
.then(user =>
bcrypt.compare(req.body.password, user.password, (err, success) =>
req.user = user;
next();
);
)
,
auth.createToken,
auth.createRefreshToken,
auth.logUserActivity,
(req, res) =>
res.status(201).send(
success: true,
authToken: req.authToken,
refreshToken: req.refreshToken
);
);
它遵循 Node 路由器架构,我将找到的 user
对象添加到 req
对象,该对象将用户传递到下一个函数 - createToken
等。使用 next()
函数。在尝试引入 GraphQL/Apollo 之前,这对我的服务器来说没问题,但现在我希望 Apollo 解析器可以轻松访问所有这些逻辑。
我经常听到人们很容易将他们的服务器从 REST/非 GraphQL 转变为 GraphQL 服务器,但目前看来,要完成所有逻辑和将所有内容分离到它们自己的函数中,这些函数直接接受参数,而不是使用 req
对象。
这是一个正确的假设吗?还是我错过了什么?
谢谢!
【问题讨论】:
【参考方案1】:迁移上面显示的代码将是一项非常简单的任务。一旦你构建了你的 graphql 服务器并创建了你的模式等。那么你需要做的就是创建登录突变。然后您的解析器将处理您上面显示的逻辑。然后,不是从 req.body 中提取值,而是函数参数。
我目前遵循的一个很好的模式是在模型本身上创建一个登录方法。然后解析器调用架构上的方法(这是我现在正在做的项目的示例:Login method。然后这是解析器的示例:Resolver
希望对您有所帮助!
【讨论】:
以上是关于将 Node JS 代码迁移到 Apollo 服务器的主要内容,如果未能解决你的问题,请参考以下文章
Apollo 服务器 - 仅使用 Passport-JWT 将身份验证应用于某些解析器
将 Node.js 项目从普通 ES6 迁移到 TypeScript