将 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 服务器的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将流星应用程序代码加载到 node.js 脚本中?

Apollo 服务器 - 仅使用 Passport-JWT 将身份验证应用于某些解析器

将 Node.js 项目从普通 ES6 迁移到 TypeScript

携程Apollo(阿波罗)配置中心把现有项目的配置文件迁移到Apollo

编程学习之如何在Node.js中优化服务器端渲染?[图]

使用mergeSchemas的Apollo Server模式拼接,如何使用来自单独模式的类型?