“无法在模块外部使用import语句”,即使是mjs

时间:2020-04-26 11:32:17

标签: express import export

我一直在尝试将一个简单的函数“ Blah Blah”导入我的特快服务器。 不幸的是,我收到错误消息:SyntaxError:无法在模块外部使用import语句。 我一整天都在尝试搜索此问题,试图将文件更改为.mjs等,但是无论我在网上找到什么方法,服务器都始终会因该错误而崩溃。

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 个答案:

答案 0 :(得分:1)

首先,检查您使用的是哪个节点版本。如果它等于或大于13,则支持ES6,从而支持import语句。否则,您必须更新节点版本或使用ES5方式( require )代替 import

第二:如果版本为13或更高版本,则可以将文件扩展名更改为 .mjs 或为您添加 {“ type”:“ module”} package.json 文件。

第三:始终将导入语句放在文件顶部。另外,我可能不会将 require import 混合使用,但这是个人喜好。

答案 1 :(得分:0)

问题已解决,显然,当您尝试在服务器端使用import而不是require时,问题就开始了。如果仍然希望使用导入,则可以更新节点版本并在package.json中编辑类型。

如果选择第一种方法,则还必须更改文件中的所有“ Require”以进行导入,否则您将得到“ ReferenceError:未定义require”

更简单的解决方案是更改:

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

使用

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

在导出的模块中,使用较旧的导出方法:

module.exports = saveToDB;
相关问题