#javascript #node.js #express
#javascript #node.js #выразить
Вопрос:
Я не знаю, почему из-за этой ошибки у меня есть другая модель и почти тот же маршрут и контроллеры, но не работает это сообщение: Ошибка: Route.get() требует функции обратного вызова, но получил [объект не определен] при маршруте. [как получить] (/Users/ediechavero/Documents/Recipe-API/node_modules/express/lib/router/route.js:202:15) в Function.proto. [как получить] (/Users/ediechavero/Documents/Recipe-API/node_modules/express/lib/router/index.js:510:19) в объекте. (/Users/ediechavero/Documents/Recipe-API/routes/places-routes.js:22:8) в модуле._compile (internal/modules/cjs/loader.js:1156:30) в объекте.Module._extensions..js (внутренний/modules/cjs/loader.js:1176:10) в модуле.загрузка (internal/modules/cjs/loader.js:1000:32) в функции.Модуль._load (internal/modules/cjs/loader.js:899:14) в Module.require (internal/modules/cjs/loader.js:1042:19) в require (internal/modules/cjs/helpers.js:77:18) в Object . (/Users/ediechavero/Documents/Recipe-API/app.js:62:15) в модуле._compile (internal/modules/cjs/loader.js:1156:30) в объекте.Module._extensions..js (в
//Controllers places this is the controllers file for the crud places
const Place = require('../models/Place');
exports.getAllPlacess = async (req, res) => {
try {
const places = await Place.find().populate('owner');
res.status(200).json({ places });
} catch (error) {
res.status(400).json({ message: `${error}` });
}
};
exports.getPlace = async (req, res) => {
try {
const { id } = req.params;
const place = await (await Place.findById(id)).populate('owner');
res.status(200).json({ place });
} catch (error) {
res.status(400).json({ message: `${error}` });
}
};
exports.createPlace = async (req, res) => {
try {
const { name, typePlace, address } = req.body;
const owner = req.user.id;
const place = await Place.create({
name,
typePlace,
address,
owner,
});
res.status(201).json({ place });
} catch (error) {
res.status(400).json({ message: `${error}` });
}
};
exports.updatePlace = async (req, res) => {
try {
const { id } = req.params;
const { name, typePlace, address } = req.body;
const place = await Place.findByIdAndUpdate(id, {
name,
typePlace,
address,
owner,
});
res.status(200).json({ place });
} catch (error) {
res.status(400).json({ message: `${error}` });
}
};
exports.deletePlace = async (req, res) => {
try {
const { id } = req.params;
await Place.findByIdAndDelete(id);
res.status(200).json({ message: 'Deleted Recipe' });
} catch (error) {
res.status(400).json({ message: `${error}` });
}
};
//Route this the file for the routes
const express = require('express');
const router = express.Router();
const uploadConfig = require('../config/cloudinary');
const {
getAllPlaces,
getPlace,
createPlace,
updatePlace,
deletePlace,
} = require('../controllers/places');
router.post('/upload', uploadConfig.single('photo'), (req, res, next) => {
if (!req.file) {
next(new Error('No file uploades'));
}
res.status(201).json({ secure_url: req.file.secure_url });
});
//CRUD PLACES
router.get('/places', getAllPlaces);
router.get('/places/:id', getPlace);
router.post('/places/create', createPlace);
router.put('/places/edit/:id', updatePlace);
router.delete('/places/delete/:id', deletePlace);
module.exports = router;
//app.js
require('dotenv').config();
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const express = require('express');
const mongoose = require('mongoose');
const logger = require('morgan');
const path = require('path');
const colors = require('colors');
const cors = require('cors');
const session = require('express-session');
mongoose
.connect(process.env.DB, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
})
.then((x) =>
console.log(
`Connected to Mongo! Database name: "${x.connections[0].name}"`.cyan
.underline.bold
)
)
.catch((err) => console.error('Error connecting to mongo', err.red));
const app_name = require('./package.json').name;
const debug = require('debug')(
`${app_name}:${path.basename(__filename).split('.')[0]}`
);
const app = express();
app.use(
cors({
credentials: true,
origin: [process.env.FRONTENDPOINT],
})
);
app.use(
session({
resave: false,
saveUninitialized: true,
secret: process.env.SECRET,
cookie: { maxAge: 1000 * 60 * 60 },
})
);
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cookieParser());
app.use(logger('dev'));
const index = require('./routes/index');
app.use('/', index);
const recipe = require('./routes/recipe-routes');
app.use('/api', recipe);
const place = require('./routes/places-routes');
app.use('/api', place);
// Uncomment this line for production
// app.get('/*', (req, res) => res.sendFile(__dirname '/public/index.html'));
module.exports = app;
Комментарии:
1. В какой строке вашего кода возникает эта ошибка?
2. строка 22 в файле маршрута router.get(‘/places’,getAllPlaces)
Ответ №1:
Похоже, есть разница в написании там, где вы экспортируете и где вы импортируете.
Вы определяете один экспорт следующим образом:
exports.getAllPlacess = function() { ... }
Но затем импортируйте его следующим образом:
const {
getAllPlaces,
getPlace,
createPlace,
updatePlace,
deletePlace,
} = require('../controllers/places');
Измените это:
exports.getAllPlacess = function() { ... }
к этому:
exports.getAllPlaces = function() { ... }
Комментарии:
1. @EdieAprovita — Если это ответило на ваш вопрос или решило вашу проблему, вы можете сообщить об этом сообществу, щелкнув галочку слева от ответа. Это также принесет вам несколько очков репутации за соблюдение правильной процедуры.