Azure 与 Node.js:丢失和未经授权的资源

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

我是部署方面的新手,刚刚开始使用 azure。 我有一个项目,要求我在其中部署一个应用程序,该应用程序稍后必须与 Azure 的其他方面进行交互。所以我决定使用我一年前使用过的应用程序,该应用程序在本地运行得非常好。
它的作用非常简单,它会在/views中找到index.html,并将其显示在基本路由“/”上。当我输入“/earthquakes”时,它将获取 MongoDB 数据库和数据集合并列出所述数据,使每一行都可单击以访问“/earthquakes:id”路线,该路线将在所选行上显示更详细的数据。

由于我尝试了许多修复,所以我决定暂时摆脱数据库部分,只专注于让 Nodejs 应用程序正常工作,但仍然无法正常工作。
每当我在通过 Azure 部署后尝试通过其链接访问该应用程序时,我不可避免地会遇到以下错误: 您无权查看此目录或页面。 - 当打开“/”时
您正在查找的资源已被删除、更名或暂时不可用。 - 当在“/test”或任何其他路线上时。

我的文件夹结构如下:

baseUrl.js

index.js

package.json

package-lock.js

/views

  earthquakes.pug

  earthquakes_details.pug

  index.html

在我在index.js中使用的代码下面:

const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const dotenv = require('dotenv');

dotenv.config();

const app = express();
const path = require('path');
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

let client;

/*async function connectDB() {
  try {
    const url = process.env.DB_URI; // Utilisation de la variable d'environnement DB_URI
    client = await MongoClient.connect(url, { useUnifiedTopology: true });
    console.log('Connexion à la base de données réussie');
  } catch (err) {
    console.log('Impossible de se connecter à la base de données :', err);
  }
}


app.use(['/earthquakes', '/earthquakes/:id'], async (req, res, next) => {
  if (!client) {
    await connectDB();
  }
  next();
});

app.get('/earthquakes', async function(req, res) {
  try {
    const db = client.db('earthquake2023').limit(3);
    console.log('user sur /earthquakes');

    const results = await db.collection('earthquakes').find().toArray();
    res.render('earthquakes', { earthquakes: results });
  } catch (err) {
    console.error(err);
    res.send('Une erreur est survenue.');
  }
});

app.get('/earthquakes/:id', async function(req, res) {
  try {
    const db = client.db('earthquake2023');
    const id = req.params.id;
    console.log('user sur /earthquakes/' + id);

    const result = await db.collection('earthquakes').findOne({ id: id });
    console.log('Données de l\'earthquake transmises à la vue :', result);
    res.render('earthquake_details', { earthquake: result });
  } catch (err) {
    console.error(err);
    res.send('Une erreur est survenue.');
  }
});*/

app.get('/test', function(req, res) {
    res.send('Ceci est un test');
});
  
app.get('/', function(req, res) {
    console.log('user sur /');
    res.sendFile(path.join(__dirname, 'views', 'index.html'));
});

const baseUrl = require('./baseUrl');

app.listen(3001, function() {
  console.log('Le serveur est démarré sur le port 3001');
});

baseUrl.js 包含部署后从 azure 获取的 URL。

我尝试检查 wwwroot 是否包含我的项目文件以及它们是否可访问(在 ssh 上使用 ls -l 读取),并且确实如此。 我尝试评论任何数据库交互来仅测试 Node,但仍然没有帮助。

如果有人知道原因,那将会有很大的帮助。
预先感谢!

node.js azure deployment github-actions devops
1个回答
0
投票

我尝试了你的代码,将其部署到Azure Web应用程序(Windows),并且部署成功。

我将以下几行添加到您的 package.json 中:

"scripts": {
    "start": "node index.js"
  }

package.json:

{
  "name": "eqfinder",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^16.4.5",
    "express": "^4.18.2",
    "express-handlebars": "^7.0.6",
    "mongodb": "^5.2.0",
    "pug": "^3.0.2"
  }
}

我添加了这一行: const port = process.env.PORT || 3001; 我编辑了这一行:app.listen(port, function() {});。 我删除了这行代码: //const baseUrl = require('./baseUrl');.

下面是完整的index.js文件。

index.js:

const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const dotenv = require('dotenv'); 
dotenv.config();
const app = express();
const path = require('path');
const port = process.env.PORT || 3001;
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
let client;
/*async function connectDB() {
  try {
    const url = process.env.DB_URI; // Utilisation de la variable d'environnement DB_URI
    client = await MongoClient.connect(url, { useUnifiedTopology: true });
    console.log('Connexion à la base de données réussie');
  } catch (err) {
    console.log('Impossible de se connecter à la base de données :', err);
  }
}
app.use(['/earthquakes', '/earthquakes/:id'], async (req, res, next) => {
  if (!client) {
    await connectDB();
  }
  next();
});
app.get('/earthquakes', async function(req, res) {
  try {
    const db = client.db('earthquake2023').limit(3);
    console.log('user sur /earthquakes');
    const results = await db.collection('earthquakes').find().toArray();
    res.render('earthquakes', { earthquakes: results });
  } catch (err) {
    console.error(err);
    res.send('Une erreur est survenue.');
  }
});

app.get('/earthquakes/:id', async function(req, res) {
  try {
    const db = client.db('earthquake2023');
    const id = req.params.id;
    console.log('user sur /earthquakes/' + id);
    const result = await db.collection('earthquakes').findOne({ id: id });
    console.log('Données de l\'earthquake transmises à la vue :', result);
    res.render('earthquake_details', { earthquake: result });
  } catch (err) {
    console.error(err);
    res.send('Une erreur est survenue.');
  }
});*/
app.get('/test', function(req, res) {
    res.send('Ceci est un test');
});
app.get('/', function(req, res) {
    console.log('user sur /');
    res.sendFile(path.join(__dirname, 'views', 'index.html'));
});
//const baseUrl = require('./baseUrl');
app.listen(port, function() {
  console.log('Le serveur est démarré sur le port 3001');
});

部署到Azure Web应用程序后,我可以在浏览器中看到输出。

Azure Web 应用程序输出

enter image description here

enter image description here

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