我在JS中有一个文件,我定义了一个构造函数和一些方法(add, get等)当我尝试从另一个JS文件中调用它时,我从标题中收到消息:TypeError: ProductManager不是构造函数
const fs = require('fs')
const filename = './productos.json'
class ProductManager {
products
constructor() {
this.products = []
}
#generateID = () => {
if (this.products.length === 0) return 1
return this.products[this.products.length - 1].id + 1
}
addProduct(title, description, price, image, code, stock) {
const id = this.#generateID()
const product = {id, title, description, price, image, code, stock}
// Valido que el producto tenga todos los campos
if (!title || !description || !price || !image || !code || !stock) {
return console.log('Error: Todos los campos son obligatorios')
}
//Valido que el producto ingresado no exista
const productExists = this.products.some((product) => product.code === code)
if (productExists) {
return console.log('Error: El producto ya existe')
} else {
this.products.push(product)
fs.writeFileSync(filename, JSON.stringify(this.products, null, 't'))
}
}
getProducts() {
// return this.#products
const contenido = JSON.parse(fs.readFileSync(filename, 'utf-8'))
console.log(" Muestro el contenido del archivo Productos", contenido)
}
我调用这个JS的第二个文件是:
const express = require('express');
const app = express();
const ProductManager = require('./productos.js');
app.get('/', (request, response) => {
response.send('<h1 style="color:goldenrod">Bienvenidos a la pagina de productos!!</h1>');
})
app.get('/products', (request, response) => {
const productManager = new ProductManager()
productManager.getProducts()
response.send({
message: "success",
data: productManager.getProducts()
})
})
app.listen(8080, () => {
console.log("Servidor corriendo en http://localhost:8080");
})
const productManager = new productManager ()
我不知道从哪里开始。
您可能需要更改导出ProductManager
的方式。有两种方法可以从文件中导出内容——要么作为默认导出,要么作为命名导出。默认导出如下所示:
// file MyClassDefault.js
class MyClass {}
export default MyClass
一个命名的导出看起来像这样:
// file MyClassNamed.js
class MyClass
export MyClass
区别在于如何导入它们:
MyClass = require('MyClassDefault.js') // default export
{ MyClass } = require('MyClassNamed.js') // named export
一个文件只能有一个默认的导出,但是可以有多个命名的导出。一般来说,你想在你的项目中使用一致的格式,这样就很容易记住如何require()
东西。