【问题标题】:ReferenceError: firebase is not defined - in Nodejs/expressReferenceError: firebase 未定义 - 在 Nodejs/express
【发布时间】:2019-10-09 13:31:24
【问题描述】:

我正在尝试通过连接到 Firebase 数据库在 Nodejs 中测试一个简单的应用程序,但是我一直收到此错误,尽管我已经初始化了云 Firebase。我也做了 npm i firebase 我缺少什么以及如何解决错误?

运行应用程序并在填写表单并按下提交按钮时不会成功。它打印出以下错误。这是完整的错误:

PS C:\Users\WorkoutApp_v1> 节点 app.js
警告,FIREBASE_CONFIG 和 GCLOUD_PROJECT 环境变量丢失。初始化 firebase-admin 将失败 服务器在端口上启动:3000
ReferenceError: firebase is not defined
在 C:\Users\WorkoutApp_v1\routes\workouts.js:22:19
在 Layer.handle [as handle_request] (C:\Users\WorkoutApp_v1\node_modules\express\lib\router\layer.js:95:5)
在下一个 (C:\Users\WorkoutApp_v1\node_modules\express\lib\router\route.js:137:13)
在 Route.dispatch (C:\Users\WorkoutApp_v1\node_modules\express\lib\router\route.js:112:3)
在 Layer.handle [as handle_request] (C:\Users\WorkoutApp_v1\node_modules\express\lib\router\layer.js:95:5)
在 C:\Users\WorkoutApp_v1\node_modules\express\lib\router\index.js:281:22 在 Function.process_params (C:\Users\WorkoutApp_v1\node_modules\express\lib\router\index.js:335:12)
在下一个 (C:\Users\WorkoutApp_v1\node_modules\express\lib\router\index.js:275:10)
在 Function.handle (C:\Users\WorkoutApp_v1\node_modules\express\lib\router\index.js:174:3)
在路由器 (C:\Users\WorkoutApp_v1\node_modules\express\lib\router\index.js:47:12)
POST /workouts/add 500 27.533 ms - 1420

这是我的锻炼.js 文件

const express = require('express');
const router = express.Router();

router.get('/add', function(req,res,next) {
    res.render('workouts/add');
});

router.post('/add', function(req,res,next) {
    const workout = {
        name: req.body.Name,
        discription: req.body.Discription,
        set: req.body.Set,
        RepsTime: req.body.RepsTime
    }
    // console.log(workout);
    // return;

    const fbRef = firebase.database().ref();
    var dbRef = fbRef.child('workouts');
    dbRef.push().set(workout);

    req.flash('success_msg', 'Workout saved');
    res.redirect('/workouts');
});

module.exports = router;

这是我的 app.js 文件

const express = require('express');
const path = require('path');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const session = require('express-session');
const { check, validationResult } = require('express-validator');
const flash = require('connect-flash');

const firebase = require('firebase');
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();


var firebaseConfig = {
  apiKey: "AIzaSyC9xvJUIlgoWkS0H4Z3nQ5AXKN2y_Nnt7U",
  authDomain: "workout-8g855.firebaseapp.com",
  databaseURL: "https://workout-8g855.firebaseio.com",
  projectId: "workout-8g855",
  storageBucket: "workout-8g855.appspot.com",
  messagingSenderId: "422111087011",
  appId: "1:422111087011:web:cd6252c0a00c26428a604c",
  measurementId: "G-G3L6FN0J4F"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);


// const serviceAccount = require('./serviceAccountKey');
//admin.initializeApp(functions.config().firebase);
// admin.initializeApp({
//     credential: admin.credential.cert(serviceAccount)
// });


// Route Files
const routes = require('./routes/index');
const workouts = require('./routes/workouts');

// Init App
const app = express();

// View Engine
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// Logger
app.use(logger('dev'));

// Body Parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

// Handle Sessions
app.use(session({
  secret:'secret',
  saveUninitialized: true,
  resave: true
}));

app.post('/user', [
  // username must be an email
  check('username').isEmail(),
  // password must be at least 5 chars long
  check('password').isLength({ min: 5 })
], (req, res) => {
  // Finds the validation errors in this request and wraps them in an object with handy functions
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
  }

  User.create({
    username: req.body.username,
    password: req.body.password
  }).then(user => res.json(user));
});


// Static Folder
app.use(express.static(path.join(__dirname, 'public')));

// Connect Flash
app.use(flash());

// Global Vars
app.use(function (req, res, next) {
  res.locals.success_msg = req.flash('success_msg');
  res.locals.error_msg = req.flash('error_msg');
  res.locals.error = req.flash('error');
  next();
});

// Routes
app.use('/', routes);
app.use('/workouts', workouts);

// Set Port
app.set('port', (process.env.PORT || 3000));

// Run Server
app.listen(app.get('port'), function(){
  console.log('Server started on port: '+app.get('port'));
});

【问题讨论】:

  • 将所有 firebase 内容抽象到其自己的模块中并导出 firebase,然后只需将该文件包含在需要的位置,就像您已经使用路由一样。
  • @Lawrence 太棒了!我把所有firebase的东西都移到一个文件firebaseDb.js中然后在app.js中requing它你的意思是这样的吗: const firebasedb = require('firebaseDb');
  • 是的,无论如何你都不希望它出现在服务器引导文件中

标签: node.js firebase firebase-realtime-database


【解决方案1】:

在锻炼.js中

你需要添加

const firebase = require('firebase');

正如您在以下行中所称的那样

const fbRef = firebase.database().ref();

【讨论】:

    【解决方案2】:

    在你使用的锻炼.js 中

    const fbRef = firebase.database().ref();
    

    但你从来没有在这个文件中定义它

    【讨论】:

      猜你喜欢
      • 2022-12-04
      • 2017-04-19
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2013-07-22
      • 2022-01-26
      相关资源
      最近更新 更多