【发布时间】:2021-06-24 11:09:51
【问题描述】:
转到 GET 路由以使用产品数据为我的 Heroku 数据库播种时遇到 H12 超时错误。我创建了执行 SeedProducts.seed 类方法的 get 路由 (/products/SEEDALLPRODUCTS),但是看起来错误在第一个 db.query 发生之前就出现了。我知道这不是最有效的方法,但是它可以在我的本地服务器上运行,并且不确定为什么我在使用 heroku 时遇到错误。
错误:
2021-03-27T22:42:47.394930+00:00 app[web.1]: GET /products/SEEDALLPRODUCTS - - - - ms 2021-03-27T22:42:47.395489+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/products/SEEDALLPRODUCTS" host=freebay-backend.herokuapp.com request_id=c8b5fc3f-49d8-4465-9b44-71ccfa2923ec fwd="24.119.49.241" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0 protocol=https
路线:
/** Routes for products. */
// const jsonschema = require("jsonschema");
const express = require("express");
const SeedProducts = require("../FreebaySeed");
// Seeds all products to database.
// Only to be called once at projects deployment
const router = new express.Router();
router.get("/SEEDALLPRODUCTS", async function (req, res, next) {
try {
const products = await SeedProducts.seed();
console.log("products",products)
return res.json("Successfully seeded products to database!");
} catch (err) {
return next(err);
}
});
班级
"use strict";
const products1 = require("./products_1");
const products2 = require("./products_2");
const products3 = require("./products_3");
const db = require("./db");
class SeedProducts{
static randomCondition(){
const conditions = ["Brand New", "New - Open Box", "Good", "Used"]
const condition = conditions[(Math.floor(Math.random() * 4))]
return condition
}
static randomDate(start, end) {
console.log("start",start)
console.log("end",end)
console.log("end.getTime() - start.getTime()",(end.getTime() - start.getTime()))
let currentDateTime = new Date()
return new Date(currentDateTime.getTime() + Math.random() * (36400000));
}
static randomRating() {
return ((Math.floor(Math.random() * 4))+2)
}
static randomNumberOfRatings() {
return (Math.floor(Math.random() * 1111))
}
/** Method to seed all products into database */
static async seed() {
for (let i = 0; i < products1.length; i++) {
console.log("[i]",[i])
console.log("products1[i]",products1[i])
const {item, category, sub_category, description, image_1, market_price} = products1[i]
// Create Random DateTime object
let auction_end_dt = SeedProducts.randomDate(new Date(2021, 3, 25), new Date())
console.log("auction_end_dt in FreebaySeed.js", auction_end_dt)
// Create starting price as 2/3 of the product's actual price
let starting_bid = Math.round(market_price * .66)
starting_bid = Math.round(100*starting_bid)/100
console.log("starting_bid in FreebaySeed.js", starting_bid)
// Grab random rating, number of ratings, and condition
const num_of_ratings = SeedProducts.randomNumberOfRatings()
const rating = SeedProducts.randomRating()
const condition = SeedProducts.randomCondition()
console.log("num_of_ratings in FreebaySeed.js", num_of_ratings)
console.log("rating in FreebaySeed.js", rating)
console.log("condition in FreebaySeed.js", condition)
const valuesArray =
[item, category, sub_category, description, condition, rating, num_of_ratings, image_1, starting_bid, auction_end_dt]
await db.query(`INSERT INTO products (name, category, sub_category, description, condition, rating, num_of_ratings, image_url, starting_bid, auction_end_dt)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)`, valuesArray)
}
for (let i = 0; i < products2.length; i++) {
console.log(i)
const {item, category, sub_category, description, image_1, market_price} = products2[i]
// Create Random DateTime object
let auction_end_dt = SeedProducts.randomDate(new Date(2021, 3, 25), new Date())
console.log("auction_end_dt", auction_end_dt)
// Create starting price as half of the product's actual price
let starting_bid = market_price * .5
starting_bid = Math.round(100*starting_bid)/100
// Grab random rating and number of ratings
const num_of_ratings = SeedProducts.randomNumberOfRatings()
const rating = SeedProducts.randomRating()
const condition = SeedProducts.randomCondition()
const valuesArray =
[item, category, sub_category, description, condition, rating, num_of_ratings, image_1, starting_bid, auction_end_dt]
await db.query(`INSERT INTO products (name, category, sub_category, description, condition, rating, num_of_ratings, image_url, starting_bid, auction_end_dt)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)`, valuesArray)
}
for (let i = 0; i < products3.length; i++) {
console.log(i)
const {item, category, sub_category, description, image_1, market_price} = products3[i]
// Create Random DateTime object
let auction_end_dt = SeedProducts.randomDate(new Date(2021, 3, 25), new Date())
console.log("auction_end_dt", auction_end_dt)
// Create starting price as half of the product's actual price
let starting_bid = market_price * .5
starting_bid = Math.round(100*starting_bid)/100
// Grab random rating and number of ratings
const num_of_ratings = SeedProducts.randomNumberOfRatings()
const rating = SeedProducts.randomRating()
const condition = SeedProducts.randomCondition()
console.log("item", item)
const valuesArray =
[item, category, sub_category, description, condition, rating, num_of_ratings, image_1, starting_bid, auction_end_dt]
await db.query(`INSERT INTO products (name, category, sub_category, description, condition, rating, num_of_ratings, image_url, starting_bid, auction_end_dt)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)`, valuesArray)
}
}
}
module.exports = SeedProducts;
products_1.js、products_2.js 和 products_3.js 是三个大文件,每个文件都包含一组对象。
https://github.com/Bolmstead/freebay-backend/blob/master/products_1.js
https://github.com/Bolmstead/freebay-backend/blob/master/products_2.js
https://github.com/Bolmstead/freebay-backend/blob/master/products_3.js
只是好奇为什么我会收到此错误,因此我可以创建一个解决方法。提前致谢
【问题讨论】:
标签: sql node.js postgresql heroku