Ошибка синтаксиса: Неожиданный «экспорт» токена при попытке объединить историю пользователя с моим проектом

#javascript #express #mern

Вопрос:

Привет, я знаю, что это должен быть модуль.экспорт вместо экспорта, но это даже не работает, и я получаю ошибку : Route.get() требует функции обратного вызова, но получил [объект не определен] какие-либо идеи, что мне делать, извините, я новичок, я опубликовал файл 3 js истории пользователя, которую я пытаюсь добавить, я добавил, и файл, который я пытаюсь добавить. server.js файл

первый файл .js.

     const scheduleData = require('../models/schedule.js'); 


exports.getschedule= async (req,res) => {
    try {
        const allschedule= await scheduleData.find(); 

        res.status(200).json(allschedules); //Ok
    } catch (error) {
        res.status(404).json({message: error.message}) //Not Founnd
    }
}

exports.createschedules= async (req,res) => {
    const schedule= req.body; 

    const newschedule = new scheduleData(schedule); 

    try {
        await newschedule.save(); 
        res.status(201).json(newschedule); //Created
    
    } catch (error) {
        res.status(409).json({message: error.message}) //Conflict 
    }

} 

exports.deleteschedule= async (req,res) => {
    const id= req.params.id; 


    try {
       await scheduleData.findByIdAndRemove(id).exec(); 
       res.send('Successfully deleted!')
    
    } catch (error) {
        console.log(error); 
        
    }

}
 

Второй файл

 const express = require ('express')
const  { getschedule} = require ( '../../controllers/schedule.js')
const  { createschedule} = require ( '../../controllers/schedule.js')
const  { deleteschedule} = require ( '../../controllers/schedule.js')

const router = express.Router();



router.get('/', getschedule);
router.post('/', createschedule);
router.delete('/:id', deleteschedule);



//export default router;
module.exports = router;
 

Третье тьфу

  const mongoose = require  ('mongoose'); 

const scheduleSchema = mongoose.Schema({
    Day: String,
    FirstP: String, 
    SecondP: String,
    ThirdP: String, 
    FourthP: String, 
    FifthP: String,  
    tutorial: {
        type: String, 
        default: 'A'
    },
    
}); 

//const schedule= mongoose.model('schedule', scheduleSchema);
//export default schedule;
module.exports = schedule=mongoose.model('schedule', scheduleSchema);
 

server.js файл

     const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const path = require('path');
const auth = require('./routes/api/auth.routes.js');
const scheduleroutes = require ('./routes/api/schedule'); 
const courses = require('./routes/api/courses');


const app = express();

// Bodyparser Middleware
app.use(bodyParser.json());

// DB Config
const db = require('./config/keys').mongoURI;


// Connect to Mongo
mongoose
    .connect(db, { useNewUrlParser: true }) // Adding new mongo url parser
    .then(() => console.log('MongoDB Connected...'))
    .catch(err => console.log(err));

mongoose.set('debug', true);

// Use Routes
app.use('/api/courses', courses);
app.use(express.json());
app.use('/api/auth', auth);

app.use('/api/schedule',scheduleroutes);
//app.use(cors({ origin: 'http://localhost:3000/', credentials: true }));

if (process.env.NODE_ENV === 'production') {
    // Set static folder
    app.use(express.static('client/build'));

    app.get('*', (req, res) => {
        res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
    });
}

const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Server started on port ${port}`));
 

Ответ №1:

Похоже, вы смешиваете синтаксис require/exports (CommonJS) с синтаксисом импорта/экспорта (ES6). Как правило, NodeJS использует require/exports при разрешении модулей. Старайтесь использовать один последовательный стиль. Можете ли вы изменить это и посмотреть, не повторится ли ошибка:

first.js

 const scheduleData = require('../models/schedule.js');

// Named exports
exports.getschedule = async (req,res) => {
    try {
        const allschedule= await scheduleData.find(); 

        res.status(200).json(allschedules); //Ok
    } catch (error) {
        res.status(404).json({message: error.message}) //Not Founnd
    }
}

exports.createschedules = async (req, res) => {
    ...
}
 

second.js

 const {getSchedule} = require("./first.js");
const express = require("express");

const router = express.Router();
router.get("/", getSchedule);

module.exports = router;
 

third.js

 const mongoose = require('mongoose'); 

const scheduleSchema = mongoose.Schema({
    Day: String,
    FirstP: String, 
    SecondP: String,
    ThirdP: String, 
    FourthP: String, 
    FifthP: String,  
    tutorial: {
        type: String, 
        default: 'A'
    },
    
}); 

// Default export
module.exports = mongoose.model('schedule', scheduleSchema);
 

Комментарии:

1. все еще получаю эту ошибку Ошибка: Route.post() требует функции обратного вызова, но получил [объект Не определен] [0] на маршруте. <вычислено> [как сообщение] (C:UsersElshazlyDesktopUniversity-Management-Systemnode_modulesexpresslibrouterroute.js:202:15) [0] в функции.прото.<вычислено><вычислено> [как сообщение] [0] в объекте.<вычислено><анонимно> (C:UsersElshazlyDesktopUniversity- [0] на объекте. Module._extensions..js (внутренний/модули/cjs/загрузчик.js:1114:10) [0] в объекте.<анонимный> (C:UsersElshazlyDesktopUniversity-Management-Systemserver.js:6:24)

2. Хмм. Можете ли вы отредактировать сообщение с новым кодом после обновления и убедиться, что в вашем коде нет опечаток ?

3. у вас какая-то опечатка в коде. Синтаксис — НЕТ exports.export= createschedules= async (req,res) . Это exports.createSchedules = aysnc (req, res) => . Ознакомьтесь с этой ссылкой , чтобы узнать больше. Кроме того, на заметку, вы можете уничтожить сразу много вещей, поэтому во втором файле вы можете сделать const { getschedule, createSchedule, deleteSchedule} = require ( '../../controllers/schedule.js') — одну строку вместо трех

4. Мне жаль, что я удалил (.экспорт), но все равно получаю ту же ошибку (отредактировал код )

5. Имя — это ваш первый файл createschedules , но затем импортируется ваш второй файл createschedule (без последней буквы «s»). Вы можете проверить это еще раз ?