【问题标题】:The requested module './server/controller/controller.js' does not provide an export named 'default'请求的模块“./server/controller/controller.js”不提供名为“default”的导出
【发布时间】:2021-11-02 17:26:43
【问题描述】:

我目前是后端新手,在我的项目中使用ES6 modules

当我将控制器文件导入index.js 并启动项目时,它说:-

语法错误:请求的模块“./server/controller/controller.js”未提供名为“default”的导出

当我将其导入为:-

import {controller} from './server/controller/controller.js'
        ^^^^^^^^^^
Syntax Error: The requested module './server/controller/controller.js' does not provide an export named 'controller'

所以我在这里做错了什么 我还在我的包中提到了“类型”:“模块”。 json文件

index.js 文件


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 文件


import Userdb from "../model/model.js";

exports.create = (req,res) =>{

}
exports.find = (req,res) =>{

}
exports.update = (req,res) =>{

}
exports.delete = (req,res) =>{

}

model.js 文件

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

我是否需要用 Userdb 替换 controller.js 中的导出,因为我使用的是 ES6 模块? 如果是这样,那么 controller.js 文件的代码是什么

提前感谢:)

【问题讨论】:

  • 基本上你需要从controller.js文件中导出controller来使用控制器功能

标签: javascript node.js express mongoose


【解决方案1】:

ES6 中有两种类型的导出:名称导出(一个或多个)和默认(每个模块一个)。

当您要从模块中导出多个内容时,命名导出会很有帮助,并且在您的情况下,我认为您使用它。

在您的 server.js 文件中,您在导入中使用了析构,但是,您没有以其中包含 controller 键的对象形式导出。

在你的 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}

在你的 index.js 中:

import { create, find, update, _delete } from 'controller.js';

我建议您查看this 链接,了解 ES6 中的导入和导出是如何工作的。

【讨论】:

  • 是的,这就是我做错了,花了一整天后终于明白了
  • 我也想问一下comman JS模块中的export和exports有什么区别
  • 您可以查看this链接。
  • delete 不能是变量名
猜你喜欢
  • 2021-11-07
  • 1970-01-01
  • 2022-01-25
  • 2022-11-16
  • 2023-02-02
  • 2021-10-03
  • 1970-01-01
  • 2019-10-06
  • 2019-08-31
相关资源
最近更新 更多