Как правильно обслуживать файл JSON - PullRequest
0 голосов
/ 01 ноября 2018

Как правильно обслуживать JSON, который я хочу использовать в качестве конечной точки для мобильного приложения?

В настоящее время я делаю это так - это app.js (Экспресс):

const PORT = process.env.PORT || 5000;
const env = process.env.NODE_ENV || 'development';

const express = require('express'),
      path = require('path'),
      mongoose = require('mongoose'),
      bodyParser = require('body-parser'),
      passport = require('passport');


const config = require('./backend/config/db')[env]; // load db
mongoose.connect(config.DB, { useNewUrlParser: true }).then(
    () => {console.log('Database is connected') },
    err => { console.log('Can not connect to the database'+ err)}
);

const app = express();
const apii = require('./backend/routes/apii');

// Serve static files from the React app -- added because of Heroku, the local app doesn't need this
app.use(express.static(path.join(__dirname, 'frontend/build')));


app.use(passport.initialize());
require('./backend/passport')(passport);

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));


// routes
app.use('/apii', apii);
// 

app.get('*', function(request, response) {
    response.header("Access-Control-Allow-Origin", "*");
    response.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    //response.sendFile(path.resolve(__dirname, './frontend/build', 'index.html'));
    response.sendFile(path.resolve(__dirname, '../', 'frontend/build/index.html'));
});

app.listen(PORT, () => {
    console.log(`Server is running on PORT ${PORT}`);
});

module.exports = app;

Это . / Backend / routs / apii.js :

var express = require('express');
var router  = express.Router();

router.get('/', function(req, res, next) {
    var testObject = {
        "AppName": "MongoPop",
        "Version": 1.0
    }
    res.json(testObject);
});

module.exports = router;

В настоящее время я отображаю данные JSON (в качестве конечной точки для мобильного приложения) следующим образом - в маршрутах ReactJS у меня есть:

<Route exact path="/apii" component={ ApiV1 } />

, а затем в компоненте ApiV1 следующее:

<code>import React, { Component } from 'react';
import axios from 'axios';

export default class ApiV1 extends Component {
    constructor() {
        super();
        this.state = {
            events: ''
        }
    }

    componentDidMount() {
        axios.get('/apii')
            .then((response) => {
                this.setState({events: response.data.placeholder});
                console.log('I got JSON data! ', this.state.placeholder);
            }).catch(err => {
                console.log('CAUGHT IT! -> ', err);
            });
    }

    render() {
        return (
            <div><pre>{JSON.stringify(this.state.placeholder, null, 2) }
) } }

Я рендерил JSON компоненту ReactJS, который выглядит неправильно.

Я пытался обслужить этот файл JSON по экспресс-маршруту, но этот маршрут никогда не был доступен через порт 3000 (ReactJS) - localhost: 3000 / apii , это дало мне пустую страницу. На localhost: 5000 / apii - маршрут Express, данные были доступны, но я не могу получить доступ к этой конечной точке из мобильного приложения.

Я использую прокси во внешней части проекта:

"proxy": "http://localhost:5000"

Работает для приложения React + экспресс-бэкэнд, веб-сайт работает хорошо, но не обслуживает конечную точку /apii - результатом здесь является только пустая страница.

Как правильно обслуживать конечную точку JSON?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...