Я создал API-интерфейс nodejs с маршрутами, которые извлекают данные из mongodb.Когда я запускаю его локально: нет проблем.Когда я докеризирую свои приложения, эти маршруты возвращают:
<code><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /data/saveData/addGameResult
Я использую docker-compose, чтобы поместить 2 изображения в контейнер: - Nodejs - mangoraft /mongodb-arm (mongoDb, адаптированный для процессоров Arm)
Я не имею ни малейшего представления о том, откуда может возникнуть эта ошибка, действительно, мой API работает нормально, так как он возвращает эту ошибку.Но я не знаю, почему мой маршрут кажется другим при работе в докере (я проверил несколько раз, чтобы убедиться, что конечная точка, которую я использовал в почтальоне, является хорошей).
Любая помощь или предложения будут очень признательны.
Приветствия, Алексис
мой Dockerfile:
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3001
CMD ["node", "server"]
мой docker-compose.yml:
version: '3'
services:
app:
container_name: docker-data-foot-api
restart: always
build: .
ports:
- '80:3001'
links:
- mongo
mongo:
container_name: mongo
image: mangoraft/mongodb-arm
ports:
- '27017:27017'
volumes:
data:
external:
name: data-football
мой server.js:
const express = require('express');
const router = require("./routes/router");
const mongoose = require('mongoose');
mongoose.set('useFindAndModify', false);
const database = require("./functions/databaseFunctions");
const bodyParser = require('body-parser');
const apiCall = require('./functions/apiCallsFunctions');
var cron = require('node-cron');
const port = 3001;
const app = express();
//get body from POST request and parse it to JSON
app.use(bodyParser.json());
app.use("/data", router);
//connect to mongodb
mongoose.connect(mongodb://mongo:27017/docker-data-foot-api, {useNewUrlParser: true});
mongoose.Promise = global.Promise;
mongoose.set('useCreateIndex', true);
mongoose.connection.once('open', ()=>{
console.log("Connection to database have been succesfully made");
}).on('error', (error)=>{
console.log("connection error : " + error);
});
//get data from ext api and save it to database
cron.schedule('* 4 * * *', () => {
apiCall.resumeMatchSaisonComplete()
.then((data) => {
databaseFunction.saveGameResult(data);
var today = new Date();
var todayFormated = today.toISOString().slice(0,10);
console.log('data saved at ' + todayFormated);
});
});
app.listen(port, "0.0.0.0" ,function () {
console.log('App listening on port ' + port);
});
Мой router.js:
const saveData = require("./saveData/saveDataRoute");
const getData = require("./getData/getDataRoute");
const express = require('express');
const router = express.Router();
router.use("/saveData", saveData);
router.use("/getData", getData);
module.exports = router;
getDataRoute.js:
const express = require('express');
const router = express.Router();
const GameResultModel = require('../../models/gameResultModels /gameResultModelMain');
//query the teams names from the Db
router.get("/getAllTeamName", (req,res) => {
GameResultModel.find({}, ['match_hometeam_name', 'match_awayteam_name'], (err, doc) =>{
var response = [];
doc.forEach(element => {
if( !( response.includes(element.match_hometeam_name) ) ){
response.push(element.match_hometeam_name);
}
});
res.send(response);
if(err) return res.send(500, {error : err});
})
});
router.get("/getAllGameDetails", (req, res) => {
GameResultModel.find({}, function(err, docs) {
res.send(docs);
});
});
module.exports = router;