node.js API 未正确加载 azure cosmos mongoDB 连接字符串的环境变量

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

我有一个 microsoft azure 数据库,并且有一个用 typescript 制作的 api,可以在 node.js 服务器上运行,当我在一切正常工作的前一天晚上测试该 api 时,今天早上醒来,我不断收到错误

TypeError: Cannot read properties of undefined (reading 'startsWith')
    at connectionStringHasValidScheme (C:\Users\Jordan\Downloads\Website\auth-api\node_modules\mongodb-connection-string-url\lib\index.js:9:30)
    at new ConnectionString (C:\Users\Jordan\Downloads\Website\auth-api\node_modules\mongodb-connection-string-url\lib\index.js:85:34)
    at parseOptions (C:\Users\Jordan\Downloads\Website\auth-api\node_modules\mongodb\lib\connection_string.js:191:17)
    at new MongoClient (C:\Users\Jordan\Downloads\Website\auth-api\node_modules\mongodb\lib\mongo_client.js:51:63)
    at Object.<anonymous> (C:\Users\Jordan\Downloads\Website\auth-api\dist\server.js:25:16)
    at Module._compile (node:internal/modules/cjs/loader:1358:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1416:10)
    at Module.load (node:internal/modules/cjs/loader:1208:32)
    at Module._load (node:internal/modules/cjs/loader:1024:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)

这是我的第一个网络开发项目,所以我可能会错过一些非常简单的东西。

TS文件

import express, { Request, Response } from 'express';
import cors from 'cors';
import { MongoClient } from 'mongodb';
import dotenv from 'dotenv';

dotenv.config();

const app = express();
const port = process.env.PORT || 3000;
console.log('COSMOS_DB_URI:', process.env.COSMOS_DB_URI);

app.use(cors());
app.use(express.json());

const client = new MongoClient(process.env.COSMOS_DB_URI!);
client.connect().then(() => {
  const db = client.db('jrfbActivityLogger');
  const usersCollection = db.collection('Usernames');

  app.post('/login', async (req: Request, res: Response) => {
    try {
      const { username } = req.body;
      const user = await usersCollection.findOne({ username });

      if (user) {
        res.status(200).json({ success: true });
      } else {
        res.status(401).json({ success: false, message: 'Authentication failed' });
      }
    } catch (error) {
      console.error('Error:', error);
      res.status(500).json({ success: false, message: 'An error occurred' });
    }
  });

  app.listen(port, () => {
    console.log(`Server is running on port ${port}`);
  });
}).catch((err) => {
  console.error('Failed to connect to database:', err);
});

.env 文件内容已删除识别信息

COSMOS_DB_URI=mongodb://myDBUsername:[email protected]:myport/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@mydb@

ts 配置文件

{
    "compilerOptions": {
      "target": "ES6",
      "module": "commonjs",
      "rootDir": "./src",
      "outDir": "./dist",
      "strict": true,
      "esModuleInterop": true
    },
    "include": ["src/**/*.ts"],
    "exclude": ["node_modules"]
  }

尝试了一切,从重命名 env 文件、在连接脚本中添加引号以及重新安装所有节点模块,我似乎无法找出问题所在。我可以确认我的 env 文件位于我的 api 根目录中并且语法是正确的。

node.js typescript azure azure-cosmosdb web-development-server
1个回答
0
投票

问题在于应用程序未通过

--env-file=.env
执行。

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