环回获取错误 - 同一版本中用户validatePassword函数的主要更改(3.0.0)

时间:2018-06-04 14:46:09

标签: node.js loopbackjs

我正在使用loopback 3.0.0,我最近在一周前设置了一台新服务器。为此,我通过放入package.son文件来运行命令npm install

但是在已安装的文件中,node_modules / loopback / common / user.js模块已经发生了重大变化。

EGS:

旧文件:

// Copyright IBM Corp. 2014,2016. All Rights Reserved.
  User.validatePassword = function(plain) {
    var err;
    if (plain && typeof plain === 'string' && plain.length <= MAX_PASSWORD_LENGTH) {
      return true;
    }
    if (plain.length > MAX_PASSWORD_LENGTH) {
      err = new Error(g.f('Password too long: %s', plain));
      err.code = 'PASSWORD_TOO_LONG';
    } else {
      err =  new Error(g.f('Invalid password: %s', plain));
      err.code = 'INVALID_PASSWORD';
    }
    err.statusCode = 422;
    throw err;
  };

新文件:

// Copyright IBM Corp. 2014,2018. All Rights Reserved.
User.validatePassword = function(plain) {
        var err;
        if (!plain || typeof plain !== 'string') {
          err = new Error(g.f('Invalid password.'));
          err.code = 'INVALID_PASSWORD';
          err.statusCode = 422;
          throw err;
        }

        // Bcrypt only supports up to 72 bytes; the rest is silently dropped.
        var len = Buffer.byteLength(plain, 'utf8');
        if (len > MAX_PASSWORD_LENGTH) {
          err = new Error(g.f('The password entered was too long. Max length is %d (entered %d)',
            MAX_PASSWORD_LENGTH, len));
          err.code = 'PASSWORD_TOO_LONG';
          err.statusCode = 422;
          throw err;
        }
      };

我使用相同的版本开发了我的代码,但是使用了相同版本(3.0.0。)中提供的旧代码。在这里你可以看到,在新代码中没有 return 语句,所以代码无限地等待返回和超时。在这两个地方,package.json文件包含相同的版本:"loopback": "^3.0.0"

我希望不建议将node_modules从开发服务器复制到生产服务器。

那么我们如何处理这类问题?

1 个答案:

答案 0 :(得分:2)

在package.json中指定版本号时,有几种不同的方式https://docs.npmjs.com/files/package.json#dependencies

您的方式是默认值,^表示

  

与版本

兼容

所以^ 3.0.0只会安装3.0.0 如果它是最新的次要版本和修复版本,否则它将采取当天最新版本的环回。今天是3.19.3

问题是在版本v3.10.1中引入的(感谢@vasan)所以在本地可能你有3.10.0版本,然后在服务器上3.10.1

关于此问题What's the difference between tilde(~) and caret(^) in package.json?

中的版本号,有一个很好的解释

我建议使用精确版本,即3.19.3,然后使用像rennovate,https://github.com/renovate-bot这样的服务来更新您的项目,以便及时了解安全补丁

在npm的第5版中引入了另一个针对此的警卫,package-lock.json https://docs.npmjs.com/files/package-lock.json。如果您在其中检查此文件,将确保无论您在何处运行npm install,都会在您运行它的任何地方安装npm模块的确切版本。