узел / экспресс, работающий в докере: не может достичь ни одного маршрута моего API (ошибка не может получить /) - PullRequest
0 голосов
/ 02 февраля 2019

Я создал 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;
...