Issue
I am currently new at backend and using ES6 modules
in my project
when I import controller file to index.js
and start the project it says :-
Syntax Error: The requested module ‘./server/controller/controller.js’ does not provide an export named ‘default’
and when I import it as :-
import {controller} from './server/controller/controller.js'
^^^^^^^^^^
Syntax Error: The requested module './server/controller/controller.js' does not provide an export named 'controller'
so what i am doing wrong here
i also mention "type": "module" in my package. json file
index.js file
import express from 'express'
import dotenv from 'dotenv'
import morgan from 'morgan'
import path from 'path';
import mongoose from "mongoose";
import {controller} from './server/controller/controller.js'
import route from './server/routes/route.js';
const __dirname = path.resolve();
const app = express();
//mongoDb
const connectDB = async () => {
try{
// mongodb connection string
const con = await mongoose.connect(process.env.MONGO, {
useNewUrlParser: true,
useUnifiedTopology: true,
})
console.log(`MongoDB connected `);
}catch(err){
console.log(err);
}
}
//mongodb finish
dotenv.config({path:'confige.env'})
const PORT = process.env.PORT || 5000
app.use(morgan('tiny'));
//database
connectDB()
//view engine
app.use(express.urlencoded({ extended : true}))
app.set("view engine", "ejs")
app.use('/css', express.static(path.resolve(__dirname, "assets/css")))
app.use('/js', express.static(path.resolve(__dirname, "assets/js")))
//routes
app.use('/',route)
// routes finish
//controller
app.post('/api/users',controller.create)
app.put('/api/users',controller.update)
app.delete('/api/users',controller.delete)
app.get('/api/users',controller.find)
app.listen(PORT, ()=> { console.log(`Server is running on http://localhost:${PORT}`)});
controller.js file
import Userdb from "../model/model.js";
exports.create = (req,res) =>{
}
exports.find = (req,res) =>{
}
exports.update = (req,res) =>{
}
exports.delete = (req,res) =>{
}
model.js file
import mongoose from "mongoose";
const scheme = new mongoose.Schema({
name:{
type:String,
required:true
},
email:{
type:String,
required:true,
unique:true
},
gendr:String,
status:String
})
const Userdb = mongoose.model('userdb',scheme)
export default Userdb
should i need to replace exports in controller.js with Userdb beacause i am using ES6 module ?
and if so than what will be the code of controller.js file
thanks in advance 🙂
Solution
There are two types of exports in ES6: name exports(one or more) and default(one per module).
Named exports are helpful when you have more than one thing to export from the modules and in your case I think you use use it.
In your server.js file, you are using destructing in the import, however, you are not exporting in the form of object which has controller
key in it.
In your controller.js:
import Userdb from "../model/model.js";
const create = (req,res) =>{
}
const find = (req,res) =>{
}
const update = (req,res) =>{
}
const delete = (req,res) =>{ }
export {create, find, update, delete}
In your index.js :
import { create, find, update, delete } from 'controller.js';
I suggest you to check this link, how import and export works in ES6.
Answered By – Apoorva Chikara
This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0