语法错误:无法在模块外部使用 import 语句 - Firebase 与 NodeJS

问题描述 投票:0回答:4

我在index.js中的Node.js代码

let express = require('express')
const path = require('path');
import { initializeApp } from 'firebase/app';
import { getDatabase } from "firebase/database";
const firebaseConfig = {
    ...
};
const firebaseApp = initializeApp(firebaseConfig);
const database = getDatabase(firebaseApp);

let app = express()
const port = 8080
app.get('/updateRelay/:relayId/:status', function (req, res) {
    const relayId = req.params["relayId"]
    const status = req.params["status"]
    console.log(relayId,status)
    let updateObject = {}
    updateObject[relayId] = status
    database.ref("iot-device-001/status").set(updateObject, function(error) {
        if (error) {
            // The write failed...
            console.log("Failed with error: " + error)
        } else {
            // The write was successful...
            console.log("success")
        }
    })
});

app.get('/', function (req, res) {
    res.sendFile(path.join(__dirname, '/index.html'));
});

app.listen(port, () => {
    console.log(`Example app listening at http://localhost:${port}`)
})

看在上帝的份上,我无法弄清楚这段代码有什么问题。我已经尝试了所有可用的文档和教程,但最终出现了一些无法解释的错误。它要么是这个,要么是它的模块未找到。 这里是我遵循的教程的链接,它给了我“找不到模块”错误

这是我现在遇到的错误

import { initializeApp } from 'firebase/app';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:1001:16)
    at Module._compile (internal/modules/cjs/loader.js:1049:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
    at internal/main/run_main_module.js:17:47
node.js firebase-realtime-database
4个回答
1
投票

您的函数似乎未定义为模块,因此您无法在其中使用

import
。你必须使用
require

您可以通过更换来解决您的问题

import { initializeApp } from 'firebase/app';
import { getDatabase } from "firebase/database" 

var initializeApp = require('firebase/app')
var getDatabase = require('firebase/database')

您可以在这里找到更多说明:https://flexiple.com/javascript-require-vs-import/


0
投票

如何从 Node JS 实现它通常有点令人困惑。最简单的方法是按照这个 guide 在 NodeJS 中安装,一旦 SDK 安装在本地项目中,就需要 初始化它

为此,您应该按照说明生成私钥,您必须将其添加到项目中才能从中调用服务

即便如此,它仍然有点令人困惑,但我找到了一个非常简单的指南,以直观和详细的方式解释了如何做到这一点。


0
投票

这是一个对我有用的解决方案,替换

import { initializeApp } from 'firebase/app';
import { getDatabase } from "firebase/database" 

var {initializeApp} = require('firebase/app')
var {getDatabase} = require('firebase/database')

0
投票

简单的解决方案: 使用 typescript 创建新项目并将现有的 js 代码移至其中。 当您运行

firebase init functions
时,它会要求选择语言(ts、js 或 py)。

参考:https://firebase.google.com/docs/functions/typescript

要使用 es6 或任何其他版本而不是 commonjs,我们需要一些配置,这并不简单,您必须 npm install @types 模块。更改 package.json 中的脚本进行构建,然后使用端点文件 lib/index.js,它是 index.ts 文件的 js 版本,并且需要更多步骤。

如果这已经是一个 javascript 项目,那么您可以按照官方文档中提到的步骤进行迁移 https://firebase.google.com/docs/functions/typescript#migration_an_existing_javascript_project_to_typescript

© www.soinside.com 2019 - 2024. All rights reserved.