Не удается экспортировать функцию в nodejs

#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 из следующих действий.

  1. Измените расширение файла с .js на .mjs
  2. Добавьте в ближайший package.json файл вызываемое поле type со значением module