![](/img/trans.png)
[英]Node.js/MongoDB: How can I use module.exports to pass a localhost database url to server.js file?
[英]How Can I Use Named Module Exports in Node 16 App?
我正在使用Node 16.3.0和Express 4.17.1 (尽管我的 Node 版本很灵活)
我有一个像这样的session.js
文件:
// session.js
exports.fetchUserId = async function(token){
...
}
exports.save = async function(userId){
...
}
然后在我的app.js
文件中,我尝试这样做:
// app.js
import session from './session.js'
我收到以下错误:
import session from './session.js'
^^^^^^^
SyntaxError: The requested module './session.js' does not provide an export named 'default'
...然后我想在app.js
中使用session
,如下所示:
let userId = await session.fetchUserId(req.body.token)
我尝试了以下方法,但没有任何运气:
"type": "module"
添加到package.json
npm i esm
nodemon --experimental-modules app.js
我的代码在NuxtJS项目中使用时工作正常,但我正在尝试一个普通的 Node/Express 应用程序,并且命名的导出不起作用。
知道我做错了什么吗?
您的代码中的问题是您将 ES 模块与 CommonJS 模块混合在一起。
默认情况下,节点将每个 javascript 文件视为CommonJS 模块,但在package.json
文件中具有以下内容
"type": "module"
您告诉节点将每个 javascript 文件视为Ecmascript 模块,但在session.js
文件中,您使用 CommonJS 模块语法来导出函数。
您可以使用以下选项之一解决您的问题:
将session.js
文件的扩展名更改为.cjs
。 (不要忘记更改app.js
文件中 import 语句中的扩展名)。
将扩展名更改为.cjs
将告诉节点将session.cjs
文件视为 CommonJS 模块。
只需使用 ES 模块并更改session.js
文件中的导出,如下所示:
export const fetchUserId = async function(token){... } export const save = async function(userId) {... }
并将app.js
文件中的导入语句更改为:
import * as session from "./session.js";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.