#javascript #node.js #ecmascript-6
Вопрос:
Я определил службу функций в одном из файлов
import Category from '../models/Category.js'; export const AllCategories = () =gt; { console.log('hit'); const cursor = Category.find({}); console.log(cursor); return cursor } export default {AllCategories}
Я импортирую это в файл контроллера
import express from 'express'; import categoryService from '../services/categories.js' const router = express.Router(); export const getCategories = async(req,res) =gt; { try { const categoriesInfo = categoryService.AllCategories res.status(200).json(categoriesInfo) } catch (error) { res.status(404).json({ message: error.message }); } } export default router;
Но проблема в том, что все категории не запускаются, что здесь не так
Я также попытался добавить асинхронность/ожидание
import Category from '../models/Category.js'; export const AllCategories = async () =gt; { try { console.log("hit"); const cursor = await Category.find({}); console.log(cursor); return cursor } catch (error) { return error } } export default {AllCategories}
Но все равно не повезло
Ответ №1:
Вы не вызываете функцию, это сохраняет ее в переменной categoriesInfo
:
const categoriesInfo = categoryService.AllCategories
Чтобы получить его возвращаемое значение:
const categoriesInfo = await categoryService.AllCategories();
Примечание: Я думаю, что вам нужно сделать это async
, если вы выполняете транзакцию БД, поэтому сохраните вторую версию и протестируйте ее.
Ответ №2:
Вы не можете использовать ES module or ESM
синтаксис по умолчанию в node.js. Вам нужно либо использовать CommonJS
синтаксис, либо выполнить 1 из следующих действий.
- Измените расширение файла с
.js
на.mjs
- Добавьте в ближайший
package.json
файл вызываемое полеtype
со значениемmodule