将Node JS代码迁移到Apollo服务器

时间:2018-02-07 20:33:37

标签: node.js express graphql apollo

我正在我的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
        });
    }
);

它遵循节点路由器体系结构,我将找到的user对象添加到req对象,该对象将用户传递给下一个函数 - createToken等...使用{{1}功能。在尝试引入GraphQL / Apollo之前,我的服务器还可以,但现在我希望Apollo解析器可以轻松访问所有这些逻辑。

我经常听到人们很容易将服务器从REST /非GraphQL转换为GraphQL服务器,但目前它看起来似乎有点像找到所有逻辑并将所有内容分离到自己的函数中的工作,这些函数直接接受参数而不是使用next()对象。

这是正确的假设吗?或者我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

迁移上面显示的代码将是一项非常简单的任务。一旦构建了graphql服务器并创建了模式等,那么您需要做的就是创建登录变异。然后你的解析器将处理你上面显示的逻辑。然后,不是从req.body中提取值,而是将它们作为函数参数。

我目前正在遵循的一个好模式是在模型本身上创建一个登录方法。然后解析器调用模式上的方法(以下是我现在正在执行的项目示例:Login method。然后,这是解析器的示例:Resolver

希望这有帮助!