首页 > 解决方案 > TypeError [ERR_INVALID_ARG_TYPE]:“url”参数必须是字符串类型。收到未定义

问题描述

我正在尝试使用 Heroku-Postgres 作为 Sequelize ORM 的数据库在 Heroku 上部署我的 express 应用程序。

这是我的续集 index.js 文件:

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.js')[env];
const db = {};
var sequelizeNoUpdateAttributes = require('sequelize-noupdate-attributes');

let sequelize;
if (config.use_env_variable) {
    sequelize = new Sequelize(process.env[config.use_env_variable], config);
    // sequelizeNoUpdateAttributes(sequelize)
  } else {
  sequelize = new Sequelize(config.database, config.username, config.password,config);
  }
  // sequelizeNoUpdateAttributes(sequelize)

fs
  .readdirSync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;


db.user = require('./User')(sequelize,Sequelize);
db.Banner = require('./Banners')(sequelize,Sequelize);
db.affiliate = require('./Affiliate')(sequelize,Sequelize);

db.affiliate.hasMany(db.user, {foreignKey: "AffiliateRefcode",
 as: "Users" });

db.user.belongsTo(db.affiliate, {
  foreignKey: "AffiliateRefcode",
  as: "Affiliate",
});

db.Banner=require('./Banners')(sequelize,Sequelize);

db.user.hasMany(db.Banner,{foreignKey: "UserId"});
db.Banner.belongsTo(db.user,{
  foreignKey:"UserId",
  as:"Banner"
})

module.exports = db;

这是我所有 Sequelize 配置的 config.js 文件

module.exports = {
development:  {
    username:"postgres",
    password:"postgres",
    database:"postgres",
    host:"127.0.0.1",
    port:"5432",
    dialect:"postgres",
    logging:false
  },
  test:{
    username:"postgres",
    password:"postgres",
    database:"postgres",
    host:"127.0.0.1",
    port:"5432",
    dialect:"postgres",
    logging:false
  },
  production: {
    use_env_variable: "postgres://yspwdafvwniobd:8b34a48902f9fe06f0dbb4ad09421140b5d67f5c1d65b994987f836c0668e9d7@ec2-3-222-11-129.compute-1.amazonaws.com:5432/d27k83hqhjo247",
    dialect: "postgres"
  }

}

但是,在将应用程序部署到 Heroku 并检查日志时,出现错误:

2021-04-12T16:08:08.701474+00:00 app[web.1]: throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
2021-04-12T16:08:08.701475+00:00 app[web.1]: ^
2021-04-12T16:08:08.701475+00:00 app[web.1]:
2021-04-12T16:08:08.701476+00:00 app[web.1]: TypeError [ERR_INVALID_ARG_TYPE]: The "url" argument must be of type string. Received undefined
2021-04-12T16:08:08.701477+00:00 app[web.1]: at validateString (internal/validators.js:124:11)
2021-04-12T16:08:08.701477+00:00 app[web.1]: at Url.parse (url.js:160:3)
2021-04-12T16:08:08.701478+00:00 app[web.1]: at Object.urlParse [as parse] (url.js:155:13)
2021-04-12T16:08:08.701478+00:00 app[web.1]: at new Sequelize (/app/node_modules/sequelize/lib/sequelize.js:185:28)
2021-04-12T16:08:08.701478+00:00 app[web.1]: at Object.<anonymous> (/app/Database/models/index.js:14:17)
2021-04-12T16:08:08.701479+00:00 app[web.1]: at Module._compile (internal/modules/cjs/loader.js:1063:30)
2021-04-12T16:08:08.701479+00:00 app[web.1]: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
2021-04-12T16:08:08.701480+00:00 app[web.1]: at Module.load (internal/modules/cjs/loader.js:928:32)
2021-04-12T16:08:08.701480+00:00 app[web.1]: at Function.Module._load (internal/modules/cjs/loader.js:769:14)
2021-04-12T16:08:08.701480+00:00 app[web.1]: at Module.require (internal/modules/cjs/loader.js:952:19) {
2021-04-12T16:08:08.701481+00:00 app[web.1]: code: 'ERR_INVALID_ARG_TYPE'

什么可能是错的?

标签: javascriptnode.jsherokusequelize.jsheroku-postgres

解决方案


推荐阅读