Uso la versión de nodo 16.14.2 e intento usar ES Module en mi proyecto. Debajo de mi paquete.json.
{
"name": "community",
"version": "0.0.1",
"description": "community",
"main": "index.js",
"type": "module",
"scripts": {
"start": "nodemon server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"dotenv": "^16.0.0",
"express": "^4.17.3",
"express-async-handler": "^1.2.0",
"jsonwebtoken": "^8.5.1",
"mysql": "^2.18.1",
"mysql2": "^2.3.3",
"nodemon": "^2.0.15",
"sequelize": "^6.19.0"
},
"devDependencies": {
"sequelize-cli": "^6.4.1"
}
}
Uso Sequelize para ORM y uso sequelize-cli para generar el modelo. Mi modelo modelos/userModel.js
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class User extends Model {
static associate(models) {
}
}
User.init({
email: DataTypes.STRING,
password: DataTypes.STRING,
}, {
sequelize,
modelName: 'User',
});
return User;
};
y este es mi controlador/userController.js
import User from '../models/userModel.js'
import asyncHandler from 'express-async-handler'
import generateToken from '../utils/generateToken.js'
const registerUser = asyncHandler(async(req, res) => {
const { first_name, last_name, email, password } = req.body
const userExists = await User.findOne({
where: { email: email },
order: [ [ 'createdAt', 'DESC' ]],
});
res.send('ok', userExists);
})
He intentado esto:
a). Yo uso importar en mi controlador
import User from '../models/userModel.js'
Pero luego me sale un error
SyntaxError: el módulo solicitado '../models/userModel.js' no proporciona una exportación denominada 'default'
b). Así que cambio mi modelo para que sea como este (use el valor predeterminado de importación y exportación)
'use strict';
import { Model } from 'sequelize'
const userModel = (sequelize, DataTypes) => {
class User extends Model {
static associate(models) {
}
}
User.init({
email: DataTypes.STRING,
password: DataTypes.STRING,
}, {
sequelize,
modelName: 'User',
});
return User;
};
export default userModel;
No recibo ningún error en el servidor, pero cuando intento recuperar datos (registrar usuario), recibo un error en mi cartero.
"message": "User.findOne no es una función",
"stack": "TypeError: User.findOne no es una función\n....
Gracias.
Solución del problema
¿Cómo usar require y esm en 1 proyecto?
No. Crea un desorden. Utilice la sintaxis de módulos modernos cuando no trabaje en un proyecto heredado.
Uso Sequelize para ORM y uso sequelize-cli para generar el modelo.
El sequelize-auto
comando admite un -l esm
parámetro para generar módulos ES6 ESM.
No hay comentarios.:
Publicar un comentario