Что я пытаюсь сделать: у меня есть небольшое приложение Node, которое запрашивает API для получения данных о фондовом рынке, а затем сохраняет данные в БД Mongo (уже готовой и работающей), которую я хотел быбегать постоянно.Затем мне нужно создать API, который позволит моим другим серверам / приложениям получать эти данные (еще не сделано).
Я думаю, что Express - это хороший выбор, хотя я знаю, что есть и другие варианты.Я получаю этот код от другого API, который я создал для стекового приложения MEAN и который я искал для устранения неполадок.
Моя основная проблема заключается в том, что в большинстве учебников показано, как просто создать CRUD API для MEAN, MERN.и другие стеки.Я не совсем уверен, как структурировать эту систему, или приложения Node могут работать независимо друг от друга так, как я описываю.
В настоящее время я не получаю никаких ошибок при запуске приложения, но я нев состоянии получить что-нибудь, когда я иду к своим конечным точкам.
Когда я только начинал, я думал, что автономное приложение Node (часть запроса и записи данных) может жить в том же файле, что и часть Express, но теперьЯ не думаю, что это сработало бы и разбило их на отдельные файлы.Я видел PM2 и другие способы превращения приложения узла в фоновый сервис?
Не совсем уверен, некоторые пояснения по этому поводу, а также некоторая помощь в том, почему мои конечные точки экспресс-API не отвечают данными избаза данных.Вот мой код.
Автономное приложение:
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('--------------------');
});
фондовая модель:
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;
Редактировать: Добавлен mongoose.connect к серверу.JS, но это все еще не работает
mongoose.connect('mongodb://localhost:27017/stock-test')
.then((res) => {
console.log('connected');
})
.catch(err => {
console.error(err);
});