我一直在尝试将一个简单的函数“ 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
答案 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;