«Невозможно использовать оператор импорта вне модуля», даже если mjs - PullRequest
0 голосов
/ 26 апреля 2020

Я пытался импортировать простую функцию с надписью «Бла-бла» на мой express сервер. К сожалению, я получаю сообщение об ошибке: SyntaxError: Невозможно использовать оператор импорта вне модуля. Я пробовал гуглить эту проблему целый день, пытался изменить файл на .m js и более, но сервер продолжает сбой с этой ошибкой независимо от методов, которые я нашел в Интернете.

ExpressServer. js:

//start express server
const express = require("express");
const server = express();
const path = require("path");
var bodyParser = require("body-parser");
//Require functions that saves to DB
import {saveToDB} from './saveToDB.js';

// parse application/x-www-form-urlencoded
server.use(bodyParser.urlencoded({ extended: false }));

// parse application/json
server.use(bodyParser.json());

server.listen(5000, () => {
  console.log("express server is running..");
});

//Send form details to DB

server.get("/save", (req, res) => {
  phone = req.body.number;
  name = req.body.name;
  saveToDB();
});

saveToDB. js

const saveToDB = () => {
  console.log(`Blah blah blah`);
};

export default saveToDB;

Ошибка:

import {saveToDB} from ('./saveToDB.js');
^^^^^^

SyntaxError: Cannot use import statement outside a module

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Сначала проверьте, какую версию Node вы используете. Если это 13 или выше, ES6 и, следовательно, оператор импорта поддерживается. Иначе, вы должны обновить версию своего узла или использовать путь ES5 ( требуют ) вместо import . Второе: если версия 13 или выше, вы можете изменить расширение файла на .m js или добавить {"type": "module"} к вам пакет. json файл. Третье: всегда помещайте свои операторы импорта в начало файла. Кроме того, я бы, вероятно, не смешивал require с import , но это личное предпочтение.

0 голосов
/ 26 апреля 2020

Проблема была исправлена, очевидно, проблема начинается, когда вы пытаетесь использовать импорт на стороне сервера вместо require. Если вы все еще хотите использовать импорт sh, вы можете обновить версию своего узла и отредактировать тип в пакете. json.

Если вы выберете go с первым маршрутом, вам также придется изменить все «Require» в вашем файле для импорта, в противном случае вы получите «ReferenceError: require is notfined»

Более простым решением было бы изменить:

import {saveToDB} from './saveToDB.js';

С

const saveToDB = require("./saveToDB.js");

И в экспортированном модуле используйте более старый метод экспорта:

module.exports = saveToDB;
...