“ ReferenceError:未定义userData”-如何在单独的辅助函数中定义userData? 注意:

问题描述

我是初学者。我想将密码功能(encryption.js)与authentication.js文件分开,但出现错误“ ReferenceError:未定义userData”。如何在单独的辅助函数中定义userData?

authentiocation.js:

const express = require('express');
const router = express.Router();
const User = require('../models/user');
const jwt = require('jsonwebtoken');
const encryption = require("../helpers/encryption").encryption;

router.post('/register',(req,res) => { // rejestracja
  const userData = req.body;

  User.findOne({ email: userData.email },(error,user) => {
   (...)
      else {
        
        encryption(); // <-----------------

        const user = new User({
          firstname: userData.firstname,email: userData.email,surname: userData.surname,password: encrypted
        });
        user.save((error,registeredUser) => {
          if (error) {
            res.status(401).send('Błąd rejestracji!')
          } else {
            const firstname = user.firstname;
            surname = user.surname;
            email = user.email;
            payload = { subject: registeredUser._id };
            token = jwt.sign(payload,'secretKey');
            res.status(200).send({ token,firstname,surname,email });
          }

encryption.js:

const express = require('express');

function encryption() {
    const crypto = require('crypto');
    const algorithm = 'aes-192-cbc';
    // Key length is dependent on the algorithm. In this case for aes192,it is
    // 24 bytes (192 bits).
    // Use async `crypto.scrypt()` instead.
    const key = crypto.scryptSync(userData.password,'salt',24);
    // Use `crypto.randomBytes()` to generate a random iv instead of the static iv
    // shown here.
    const iv = Buffer.alloc(16,0); // Initialization vector.
    const cipher = crypto.createCipheriv(algorithm,key,iv);
    let encrypted = '';
    cipher.on('readable',() => {
        let chunk;
        while (null !== (chunk = cipher.read())) {
            encrypted += chunk.toString('hex');
        }
    });

    cipher.write('some clear text data');
    cipher.end();
}

module.exports = {
    "encryption": encryption
}

解决方法

您可以将其作为参数传递给加密功能(在encryption.js文件中):

function encryption(userData) {
    ...
    // at the end:
    return encrypted;
}

然后在authentiocation.js中这样称呼(您是在这里表示 authentication 吗?):

const encrypted = encryption(userData);

注意:

经过编辑以解决评论中提到的其他问题。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...