nodejs中使用jsonwebtoken模块遇到的错误

前端学习真的是要踩一路的坑啊,我之前学习新知识都是通过看视频,后来发现这种方式太慢,还不如看博客,实操一个项目学习的快。
最近在学习Nodejs的restful风格api的搭建,网上搜了搜发现学习资料还是不好找,博客上的资料都太老了,我找那篇博客都是2015年的了,但是感觉可操作性很强,写的比较小白,适合我这种新手,而且还可以练习使用下postman。再三犹豫下,我还是选了这篇来学习,只能说知识是不断在更替的。有些东西的写法也会有改变,参考的时候一定要抱着一种审判的眼光来学习,不然很恼火的。


下面正题开始,
下面是认证接口的写法

apiRoutes.post('/auth', function(req, res) {

    // find the user
    User.findOne({
        name: req.body.name
    }, function(err, user) {

        if (err) throw err;

        if (!user) {
            res.json({ success: false, message: '认证失败,用户名找不到' });
        } else if (user) {

            // 检查密码
            if (user.password != req.body.password) {
                res.json({ success: false, message: '认证失败,密码错误' });
            } else {


                // 创建token
                var token = jwt.sign(user, app.get('superSecret'), {
                    expiresInMinutes: 1440 // 设置过期时间
                });

                // json格式返回token
                res.json({
                    success: true,
                    message: 'Enjoy your token!',
                    token: token
                });
            }

        }

    });
});

主要是这里报错了:

// 创建token
var token = jwt.sign(user, app.get('superSecret'), {
                    expiresInMinutes: 1440 // 设置过期时间
                });

更正方法:
1.将sign()方法中的user参数改为user.toJSON();
2.将expiresInMinutes改为expiresIn。


以下纯属个人叨叨,可看可不看。

运行这段代码的时候,首先给我来了个这个错

expected "payload" to be a plain object

小白加英文渣的我当然看不懂是啥错了,然后各种对比原代码,看看是不是哪里写错了,找了半天也没找到,很傻很天真,
毕竟这是小白遇到报错的第一种解决方式。然后不愿放弃的我开始各种揣测是哪儿出错了呢?是不是我的模块没导入进来,去看看报错提示吧,仔细看了看可以定位到这一行。
// 创建token
var token = jwt.sign(user, app.get('superSecret'), {
expiresInMinutes: 1440 // 设置过期时间
});

然后找半天也没找到,检查几个参数都没啥问题啊。然后开始小白式的第三种检错方式:去百度报错的提示。然后终于知道,这里的user参数应该写成user.toJSON()。这里期望是一个json的对象。当找到这个错误时,欣喜若狂的我马上跑去运行代码,结果…内心有句xxx不知当讲不当讲。这次报了一个新的错误,不过这对于一个乐观的程序员来说是一件好事,因为这个错误已经被修复啦,程序终于走向下一个地方啦。下面是报错语句:

"expiresInMinutes"is not allowed in "options"

然后这次吸取教训,直接把报错代码贴上百度,结果发现是说,最新版的jsonwebtoken模块中的失效时间参数已经参数已经不再这样写了。应该把expiresInMinutes换成expiresIn


总结:
上面说这么多其实无非是想记录一下自己的小白学习路程,经过这次的教训,我总结出:
1. 当学习知识时候,尤其是那种很旧的参考文献时,一定要抱着一种审批思维来学习,毕竟经过时间的更迭,会有更优的写法呢。
2. 写代码遇到错误,一定要从根本找寻错误,像遇到这种因为而版本更迭报错时,去官网看看到底应该怎么写。这样才会有成长。
感谢:
还是感谢这篇博客的作者让我学习啦。要学习的朋友参考这篇博客吧。

你可能感兴趣的:(nodejs中使用jsonwebtoken模块遇到的错误)