Попытка зациклить документ json и вставить некоторые данные в новую строку в базе данных sql с помощью NODE.js - PullRequest
0 голосов
/ 28 ноября 2018

App.js для подключения к БД и имеет GET / POST по одному маршруту.Я использую данные JSON из https://www.reddit.com/r/DMT.json

let mysql = require('mysql2');
let dbInfo = require('./dbInfo.js');
let express = require('express');
let bodyParser = require("body-parser");
let redditdata = require('./cit381-assign07-reddit.json');
let app = express();

// Add static route for non-Node.js pages
app.use(express.static('public'));

// Configure body parser for handling post operations
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// Select all rows
app.get('/reddit-import/:post_ID?', function (req, res) {
   console.log("Route /reddit-import GET", req.params);
   let data = [];
   let sql = "SELECT * FROM POSTS";
   if (req.params.post_ID != undefined) {
      sql += " WHERE post_ID = ?";
      data = [req.params.post_ID];
      // Object technique:
      // sql += " WHERE ?";
      // data = req.params;
      console.log(data);
   } else {
      sql += " ORDER BY post_ID";
   }
   console.log("SQL", sql);
   connection.query(sql, data,
      function (errQuery, rows) {
         if (errQuery) {
            console.log(errQuery);
            res.json({rows: [], err: errQuery});
         } else if (rows) {
            console.log("Rows returned", rows.length);
            res.json({rows: rows, err: ""});
         } else {
            console.log("No post rows...\n");
            res.json({rows: [], err: ""});
         }
      }
   );
});

// Add a new row from json
app.post('/reddit-import', function (req, res) {
   console.log("Route /reddit-import POST");
   let obj = JSON.parse(redditdata);
   let data = {title: req.body.title, created_utc: req.body.created_utc, score: req.body.score, num_comments: req.body.num_comments, num_crossposts: req.body.num_crossposts, url: req.body.url, permalink: req.body.permalink};
   connection.query("INSERT INTO POSTS SET ?",
      data,
      function (errQuery, result) {
         if (errQuery) {
            console.log(errQuery);
            res.json({status: "Error", err: errQuery});
         } else {
            console.log("Insert ID: ", result.insertId);
            res.json({status: result.insertId, err: ""});
         }
      }
   );
});

// Handle missing pages requested using GET HTTP verb
app.get('*', function(req, res) {
   res.status(404).send('Sorry that page does not exist');
});

// Create database connection
console.log('Creating connection...\n');
let connection = mysql.createConnection({
   host: dbInfo.dbHost,
   port: dbInfo.dbPort,
   user: dbInfo.dbUser,
   password: dbInfo.dbPassword,
   database: dbInfo.dbDatabase
});

// Connect to database
connection.connect(function(err) {
   console.log('Connecting to database...\n');

   // Handle any errors
   if (err) {
      console.log(err);
      console.log('Exiting application...\n');
   } else {
      console.log('Connected to database...\n');
      // Listen for connections
      // Note: Will terminate with an error if database connection
      // is closed
      const ip = 'localhost';
      const port = 8080;
      app.listen(port, ip, function () {
         try {
            console.log('Reddit JSON server app listening on port ' + port);
         } catch (err) {
            console.log(err);
         }
      });
   }
});

Я изо всех сил пытаюсь, чтобы цикл приложения поверх полного файла JSON вставлял новые строки.Файл JSON содержит вложенные разделы для каждого нового сообщения, я хочу, чтобы данные из каждого сообщения были вставлены в мою таблицу базы данных.Я могу подключиться к базе данных, app.get работает нормально, и попытка вставить один пост (app.post) работает просто отлично.Как бы я настроил это, чтобы анализировать или перебирать весь файл JSON и создавать новую строку для каждого сообщения?Я новичок в node.js и выражаюсь, поэтому не уверен, как включить цикл javascript в экспресс-приложение.Я использую Почтальон для вызова приложения.

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