我是部署方面的新手,刚刚开始使用 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,但仍然没有帮助。
如果有人知道原因,那将会有很大的帮助。
预先感谢!
我尝试了你的代码,将其部署到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 应用程序输出: