Nodejs中crypto is not defined.

Nodejs中crypto is not defined.

error info

ReferenceError: crypto is not defined at exports.doReg (/home/xxx/Project/nodeJs/microblog/routes/index.js:85:12) at callbacks (/home/xxx/Project/nodeJs/microblog/node_modules/express/lib/router/index.js:165:11) at param (/home/xxx/Project/nodeJs/microblog/node_modules/express/lib/router/index.js:139:11) at pass (/home/xxx/Project/nodeJs/microblog/node_modules/express/lib/router/index.js:146:5) at Router._dispatch (/home/xxx/Project/nodeJs/microblog/node_modules/express/lib/router/index.js:173:5) at Object.router (/home/xxx/Project/nodeJs/microblog/node_modules/express/lib/router/index.js:33:10) at next (/home/xxx/Project/nodeJs/microblog/node_modules/express/node_modules/connect/lib/proto.js:190:15) at Object.handle (/home/xxx/Project/nodeJs/microblog/app.js:47:5) at next (/home/xxx/Project/nodeJs/microblog/node_modules/express/node_modules/connect/lib/proto.js:190:15) at store.get.next (/home/xxx/Project/nodeJs/microblog/node_modules/express/node_modules/connect/lib/middleware/session.js:302:9) POST /reg 500 59ms

关于这个问题,是不是要单独安装相关的module?


16 回复

Nodejs中crypto is not defined问题

错误信息

ReferenceError: crypto is not defined
at exports.doReg (/home/xxx/Project/nodeJs/microblog/routes/index.js:85:12)
...

解释与解决方案

当你在Node.js项目中使用crypto模块时,如果遇到crypto is not defined的错误,通常是因为你没有正确引入该模块。在Node.js环境中,crypto是一个内置模块,无需额外安装。

以下是解决这个问题的具体步骤:

  1. 确保引入了crypto模块: 在你的代码文件(例如index.js)中,需要使用以下语句来引入crypto模块:

    const crypto = require('crypto');
    
  2. 检查代码引用: 确保在出现错误的地方正确引用了crypto模块。例如,在处理用户注册逻辑时,可以这样使用:

    const crypto = require('crypto');
    
    function doReg(req, res) {
        // 示例:生成一个随机的salt值
        const salt = crypto.randomBytes(16).toString('hex');
        
        // 示例:使用sha256算法对密码进行哈希处理
        const hash = crypto.createHmac('sha256', salt).update(req.body.password).digest('hex');
        
        // 继续处理其他逻辑...
        res.send({ salt, hash });
    }
    
    exports.doReg = doReg;
    
  3. 完整示例: 下面是一个完整的示例,展示了如何在Express应用中使用crypto模块来处理用户注册逻辑:

    const express = require('express');
    const crypto = require('crypto');
    
    const app = express();
    app.use(express.json());
    
    function doReg(req, res) {
        const salt = crypto.randomBytes(16).toString('hex');
        const hash = crypto.createHmac('sha256', salt).update(req.body.password).digest('hex');
        
        res.send({ salt, hash });
    }
    
    app.post('/reg', (req, res) => {
        doReg(req, res);
    });
    
    app.listen(3000, () => {
        console.log('Server is running on port 3000');
    });
    

通过上述步骤,你应该能够解决crypto is not defined的问题,并正确地在Node.js应用中使用crypto模块。


这个都好像是语法错误了… 楼主要提供更多细节才行啊, 比如对应的代码…

ReferenceError: crypto is not defined

crypto是内置模块,直接var crypto = require('crypto')即可使用。楼主是新手么?!!!!

req.flash()为什么就不能用了?

不知道,看不懂!没看过你这个microblog的代码。

建议你先检查一下Express的版本是否一致 express 3.x 中删除了req.flash(),参考这里:https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x

或者直接安装express 2.x版本

加粗的就是抛出异常的地方 为什么我使用 res.redirect(’/’); 转向main page 的时候会报这个错,

同时页面会出现: can not connect the 127.0.0.1:3000

而 mongod 会出现 end connection…

我只想在这里告诉大家 问题解决了。 但是这个问题的 Root cause还需要尝试。

你这个microblog的源码在哪里? 代码都没看到,你是要让大家猜那是什么出错么? 俺还没到那个可以猜出来的水平。。。

下回记得代码和报错按照语法格式化一下… http://github.github.com/github-flavored-markdown/

看来社区的页面宽度还是不太给力啊, 80 个字符有没…

界面会超界限????????????。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

界面会超界限????????????。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

界面会超界限????????????。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

界面会超界限????????????。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

这是干啥…

是加到app.js里么

从错误信息来看,你在代码中直接使用了 crypto,但是没有正确引入它。在 Node.js 中,crypto 是一个内置模块,不需要单独安装。你需要通过 require 来引入它。

示例代码

假设你的代码中有类似如下的部分:

// 错误的用法
function doReg() {
    const hash = crypto.createHash('sha256').update(password).digest('hex');
    // 其他逻辑
}

exports.doReg = doReg;

你应该修改为:

const crypto = require('crypto');

function doReg() {
    const hash = crypto.createHash('sha256').update(password).digest('hex');
    // 其他逻辑
}

exports.doReg = doReg;

解释

  • 内置模块crypto 是 Node.js 的内置模块,因此你不需要使用 npm install 安装它。
  • 引入模块:你需要通过 require('crypto') 来引入 crypto 模块。
  • 错误原因:你在代码中直接使用了 crypto,但没有引入它,所以会抛出 ReferenceError: crypto is not defined 的错误。

确保你在使用任何内置模块之前都正确引入了它们。

回到顶部