Aplikasi Node JS berjalan bersamaan dengan api ekspres dengan MongoDB

Apa yang saya coba lakukan: Saya memiliki aplikasi Node kecil yang membuat permintaan ke API untuk mendapatkan data tentang pasar saham dan kemudian menyimpan data tersebut ke Mongo DB (sudah dibuat dan berfungsi), yang ingin saya jalankan terus-menerus . Selanjutnya saya perlu membangun API yang memungkinkan server/aplikasi saya yang lain mendapatkan data tersebut (belum dibuat).

Saya pikir Express adalah pilihan yang baik meskipun saya tahu ada pilihan lain. Saya mendapatkan kode ini dari API lain yang saya buat untuk aplikasi tumpukan MEAN dan telah mencari-cari pemecahan masalah.

Masalah utama saya adalah sebagian besar tutorial menunjukkan cara membuat CRUD API untuk MEAN, MERN, dan tumpukan lainnya. Saya tidak begitu yakin bagaimana struktur sistem ini atau aplikasi Node dapat berjalan secara independen satu sama lain seperti yang saya jelaskan.

Saat ini saya tidak mendapatkan kesalahan apa pun saat menjalankan aplikasi tetapi saya tidak bisa mendapatkan apa pun saat membuka titik akhir saya.

Ketika saya pertama kali memulai, saya berpikir bahwa aplikasi Node yang berdiri sendiri (bagian permintaan dan penulisan data ini) dapat berada dalam file yang sama dengan bagian Express, tetapi sekarang saya rasa itu tidak akan berfungsi dan telah membaginya menjadi file terpisah. Saya telah melihat PM2 dan cara lain untuk menjadikan aplikasi node menjadi layanan latar belakang?

Tidak sepenuhnya yakin, beberapa klarifikasi tentang itu, serta beberapa bantuan mengapa titik akhir API ekspres saya tidak merespons dengan data dari database. Ini kode saya.

Aplikasi mandiri:

const request = require('request');
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const d = new Date();
let day = d.getDay()
let hour = d.getHours();

const stockMomentSchema = new Schema({
    symbol: String,
    price: Number,
    size: Number,
    time: {type: Date, default: Date.now}
});

const StockMoment = mongoose.model('stockMoment', stockMomentSchema, 'stockPriceData');

mongoose.connect('mongodb://localhost:27017/stock-test')
    .then(() => {
        console.log('connected');
    })
    .catch(err => {
        console.error(err);
    });

function makeRequest() {
    if(day <= 1 || day >= 5) {
        if(hour >= 10 || hour <= 15) {
            getMarketData();
        }
    }
}

function getMarketData() {
    request({
        url: 'https://api.iextrading.com/1.0/tops/last',
        json: true
    }, (err, res, body) => {
        if(err) {
            return console.error(err);
        }

        for(let i = 0; i < body.length; i++) {
            const stockMoment = new StockMoment({
                symbol: body[i].symbol,
                price: body[i].price,
                size: body[i].size,
                time: body[i].time,
            });
            stockMoment.save((err) => {
                if(err) return handleError(err);
                console.log('Saved!', i);
            });
            console.log(body[i]);
        }
    });
}


makeRequest();

//setInterval(makeRequest, 5000);

server.js:

const express = require('express');
const path = require('path'); // Not sure if this is needed
const http = require('http');
const cors = require('cors');
const bodyParser = require('body-parser');
const app = express();

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

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

//app.use(express.static(path.join(__dirname, 'dist'))); // Not sure if this is needed

app.use('/api', api);

app.get('*', function(req, res) {
    res.status(404);
});

const port = process.env.PORT || '3000';
app.set('port', port);

const server = http.createServer(app);

server.listen('3000', function() {
    console.log('--------------------');
    console.log('Server running');
    console.log('You can view the server at http://localhost:3000');
    console.log('If you are running an Angular app on while using this server please use http://localhost:4200');
    console.log('--------------------');
});

model stok:

const mongoose = require('mongoose');
const uniqueValidator = require('mongoose-unique-validator');

const StockSchema = mongoose.Schema({
    username: { type: String, unique: true, required: true },
    password: { type: String, required: true },
    email: {type: String, required: true},
    phoneNumber: {type: String, required: true},
    company: {type: String, required: true},
    about: {type: String, required: true},
    userType: {type: String, required: true}
});

StockSchema.plugin(uniqueValidator);

module.exports = mongoose.model('Stock', StockSchema);

api.js:

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

const Stock = require('./stock.js');

router.get('/', function(req, res, err) {
    console.log('Hello world');
});


router.get('/stocks/:id', function(req, res, err) {
    console.log('Hello world');
    const stockData = {
        _id: false,
        symbol: true,
        price: true,
        size: true,
        time: true
    }
    Stock.findById(req.params.id, stockData, function(err, stock) {
        if(err) {
            res.send('No stocks found');
            console.log(err);
        } else {
            res.json(stock);
        }
    });
});

module.exports = router;

Edit: Menambahkan mongoose.connect ke server.js tetapi masih tidak berfungsi

mongoose.connect('mongodb://localhost:27017/stock-test')
    .then((res) => {
        console.log('connected');
    })
    .catch(err => {
        console.error(err);
    });

person Garrett    schedule 25.08.2018    source sumber


Jawaban (1)