简体   繁体   English

如何在谷歌云应用引擎中修复“找不到模块'dotenv'”?

[英]how to fix "Can not find module 'dotenv'" in google cloud app engine?

I am new in google cloud app engine.我是谷歌云应用引擎的新手。 I am trying to deploy a node app to GCP.我正在尝试将节点应用程序部署到 GCP。 But the following error is showing:但显示以下错误:

Error: Cannot find module 'dotenv'
2021-02-14 06:07:04 backend[20210214t120450]  Require stack:
2021-02-14 06:07:04 backend[20210214t120450]  - /workspace/app.js
2021-02-14 06:07:04 backend[20210214t120450]      at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15)
2021-02-14 06:07:04 backend[20210214t120450]      at Function.Module._load (internal/modules/cjs/loader.js:667:27)
2021-02-14 06:07:04 backend[20210214t120450]      at Module.require (internal/modules/cjs/loader.js:887:19)
2021-02-14 06:07:04 backend[20210214t120450]      at require (internal/modules/cjs/helpers.js:74:18)
2021-02-14 06:07:04 backend[20210214t120450]      at Object.<anonymous> (/workspace/app.js:5:1)
2021-02-14 06:07:04 backend[20210214t120450]      at Module._compile (internal/modules/cjs/loader.js:999:30)
2021-02-14 06:07:04 backend[20210214t120450]      at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
2021-02-14 06:07:04 backend[20210214t120450]      at Module.load (internal/modules/cjs/loader.js:863:32)
2021-02-14 06:07:04 backend[20210214t120450]      at Function.Module._load (internal/modules/cjs/loader.js:708:14)
2021-02-14 06:07:04 backend[20210214t120450]      at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12) {
2021-02-14 06:07:04 backend[20210214t120450]    code: 'MODULE_NOT_FOUND',
2021-02-14 06:07:04 backend[20210214t120450]    requireStack: [ '/workspace/app.js' ]
2021-02-14 06:07:04 backend[20210214t120450]  }

My app.js:我的 app.js:

const express = require("express");
const cors = require("cors");
const fileUpload = require("express-fileupload");
const MongoClient = require("mongodb").MongoClient;
const env = require("./config/config");
const uri = `${env.MONGO_CONN_URL}`;
const PORT = env.PORT;

const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors());
app.use(fileUpload());

app.get("/", (req, res) => {
   res.send("Hello from db, it's working");
});

// connect to db
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

client.connect((err) => {
   const applicantsCollection = client.db(`${env.DB_NAME}`).collection("applicants");

   // Upload Endpoint
   app.post("/upload", (req, res) => {
      const file = req.files.file;
      const name = req.body.name;
      const email = req.body.email;
      const work = req.body.work;

      if (req.files === null) {
         return res.status(400).json({ msg: "No file uploaded" });
      }

      applicantsCollection.insertOne({ name, email, work, file }).then((result) => {
         res.send(result.insertedCount > 0);
         console.log(result);
      });
   });
});

app.listen(PORT, () => {
   console.log(`Server running on ${PORT}`);
});

My config.js:我的 config.js:

require("dotenv").config();

const env = {
   PORT: process.env.PORT,
   MONGO_CONN_URL: process.env.MONGO_CONN_URL,
   DB_NAME: process.env.DB_NAME,
};

module.exports = env;

package.json: package.json:

{
  "name": "audify-tech-backend",
  "version": "1.0.0",
  "main": "app.js",
  "license": "MIT",
  "scripts": {
    "start": "node app.js",
    "dev": "nodemon app.js"
  },
  "keywords": [
    "node",
    "javascript"
  ],
  "dependencies": {
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "express-fileupload": "^1.2.1",
    "mongodb": "^3.6.3",
    "nodemon": "^2.0.7"
  },
  "devDependencies": {
    "dotenv": "^8.2.0"
  }
}

I have also tried out this way by changing dev property in package.json:我也通过更改 package.json 中的开发属性来尝试这种方式:

{
  "name": "audify-tech-backend",
  "version": "1.0.0",
  "main": "app.js",
  "license": "MIT",
  "scripts": {
    "start": "node app.js",
    "dev": "nodemon -r dotenv/config app.js"
  },
  "keywords": [
    "node",
    "javascript"
  ],
  "dependencies": {
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "express-fileupload": "^1.2.1",
    "mongodb": "^3.6.3",
    "nodemon": "^2.0.7"
  },
  "devDependencies": {
    "dotenv": "^8.2.0"
  }
}

app.yaml: app.yaml:

runtime: nodejs12
instance_class: B1

service: backend

basic_scaling:
   max_instances: 1

env_variables:
   PORT: 8080
   MONGO_CONN_URL: mongodb connection string
   DB_NAME: "db"
   GOOGLE_CLOUD_PROJECT_ID: "abcd-website"

But the error remains same in google cloud that can't find module "dotenv".但是在找不到模块“dotenv”的谷歌云中,错误仍然存在。 I have also tried by reinstalling dotenv.我也尝试过重新安装 dotenv。 But it doesn't work.但它不起作用。 All the possible ways I have tried is working well in local machine.我尝试过的所有可能的方法都在本地机器上运行良好。

Move dotenv from devDependencies to dependenciesdotenv从 devDependencies 移至依赖项

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM