简体   繁体   中英

The requested module './server/controller/controller.js' does not provide an export named 'default'

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 :)

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM