Ошибка типа: невозможно прочитать свойства неопределенного значения (чтение «заголовка») при использовании фиктивного imJavascript

Форум по Javascript
Ответить
Anonymous
 Ошибка типа: невозможно прочитать свойства неопределенного значения (чтение «заголовка») при использовании фиктивного im

Сообщение Anonymous »

Я создаю проект Node.js (из курса Udemy) и получаю эту ошибку, когда нажимаю кнопку «Подробнее»:

Описание проблемы
После некоторой отладки и проверки подобных обсуждений вопросов и ответов я обнаружил, что проблема возникает только тогда, когда я использую фиктивный текст (например, abc) в imageUrl поле при добавлении продукта.

Если я предоставляю действительный URL-адрес изображения (например, фактическую ссылку на изображение), все работает нормально.
В одном из ответов на вопросы кто-то упомянул, что это может быть связано с вторым запросом или чем-то, связанным с тем, как извлекаются данные о продукте, но я не смог полностью понять причину.
Может кто-нибудь ясно понять? объясните почему это происходит?

Почему это работает, когда я указываю реальный URL-адрес изображения, но выдает ошибку, когда я использую фиктивный текст для imageUrl?
Примечание: Я использую файл JSON (data/product.json) для хранения данных о продукте. Файл обновляется правильно, когда я добавляю продукты, и я вижу, что там сохраняется фиктивный текст imageUrl.
TypeError: Cannot read properties of undefined (reading 'title')
at C:\Users\haris\Desktop\NODEJS\backend-1\controllers\shop.js:19:25
at C:\Users\haris\Desktop\NODEJS\backend-1\models\product.js:48:7
at C:\Users\haris\Desktop\NODEJS\backend-1\models\product.js:15:7
at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read/context:68:3)

Node.js v24.4.0

shop.js controller
const Products = require("../models/product.js");

exports.getProducts = (req, res, next) => {
Products.fetchAll((allProduct) => {
res.render("shop/product-list", {
p: allProduct,
docTitle: "All Products",
path: "/products",
});
});
};

exports.getProduct = (req, res, next) => {
const prodId = req.params.productId;
Products.findById(prodId, (product) => {
console.log(product);
res.render("shop/product-detail", {
product: product,
docTitle: product.title,
path: "/products",
});
});
};

exports.getIndex = (req, res, next) => {
Products.fetchAll((allProduct) => {
res.render("shop/index", {
p: allProduct,
docTitle: "Shop",
path: "/",
});
});
};

exports.getCart = (req, res, next) => {
res.render("shop/cart", {
path: "/cart",
docTitle: "Your Cart",
});
};

exports.getOrders = (req, res, next) => {
res.render("shop/orders", {
path: "/orders",
docTitle: "Your Orders",
});
};

exports.getCheckOut = (req, res, next) => {
res.render("shop/checkOut", {
path: "/checkout",
docTitle: "Checkout",
});
};

product.js model
const fs = require("fs");
const path = require("path");
const homePath = require("../utils/path.js");

const p = path.join(homePath, "data", "product.json");

const getProductFromFile = (cb) => {
fs.readFile(p, (err, fileCont) => {
if (err) {
cb([]);
} else {
cb(JSON.parse(fileCont));
}
});
};

module.exports = class Products {
constructor(title, imageUrl, price, description) {
this.title = title;
this.description = description;
this.imageUrl = imageUrl;
this.price = price;
this.id = Math.random().toString();
}

save() {
getProductFromFile((products) => {
products.push(this);
fs.writeFile(p, JSON.stringify(products), (err) => {
console.log(err);
});
});
}

static fetchAll(callback) {
getProductFromFile(callback);
}

static findById(id, cb) {
getProductFromFile((products) => {
const product = products.find((p) => p.id == id);
console.log(id);
cb(product);
});
}
};

product-details.ejs









[img]

Подробнее здесь: https://stackoverflow.com/questions/797 ... using-dumm
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»