Express App GET Routing не работает в производственной среде - PullRequest
0 голосов
/ 18 мая 2019

Я использую сервер Node JS на моем локальном хосте (DEV) и на NameCheap (PROD).

В обеих средах сервер работает.Оба размещают веб-приложение.Проблема у меня возникает при попытке использовать FETCH API в Javascript.

server.js

var express = require("express");
var path = require("path");
var db = require("./db");
var app = express();
const port = 3000;

app.set("port", process.env.PORT || port);

app.route("/queryDB").get(function(req, res) {
  console.log(req.query.query);

  db.query(req.query.query, function(err, rows, fields) {
    if (err) res.send(err);
    else res.send(rows);
  });
});

app.use(express.static(__dirname, { extensions: ["html"] }));
app.use("/css", express.static(path.join(__dirname + "/css")));
app.use("/js", express.static(path.join(__dirname + "/js")));
app.use("/images", express.static(path.join(__dirname + "/images")));
app.use("/icons", express.static(path.join(__dirname + "/icons")));

app.listen(app.get("port"), "0.0.0.0", () =>
  console.log("Started listening on %s", app.get("port"))
);

Функция с использованием fetch

export async function queryDB(query) {
  const res = await fetch("../queryDB?query=" + query);
  try {
    if (res.ok) {
      return res.json();
    } else {
      // eslint-disable-next-line no-console
      console.log(res);
    }
  } catch (err) {
    // eslint-disable-next-line no-console
    console.log(err);
  }
}

Первоначально она была настроена на app.route и только на app.get.После того, как исследование началось с использованием маршрута.

Попытка с использованием path.join(__dirname + "/queryDB")

Выборка должна возвращать результаты запроса из настроенной БД MySql.В настоящее время я получаю http://url.com/queryDB?query=SELECT%20Name,%20DATE_FORMAT(Date,%20%22%25W%2C%20%25M%20%25e%2C%20%25Y%22)%20as%20Date,%20Time_Format(Time,%22%25l%3A%25i%20%25p%22)%20as%20Time,%20Description%20FROM%20event%20WHERE%20IsRSVP%20=%201%20ORDER%20BY%20Date,%20Time%20ASC

с ошибкой Failed to load resource: the server responded with a status of 404 (Not Found)

В моей среде DEV возвращаются результаты запроса в массиве.

РЕДАКТИРОВАТЬ: при запуске DEBUG=express:* node server от названия дешевой консоли.Я вижу, что маршруты были созданы

  express:router:route new '/queryDB' +1ms
  express:router:layer new '/queryDB' +0ms
  express:router:route get '/queryDB' +0ms

РЕДАКТИРОВАТЬ:

Обновлен Server.JS

var express = require("express");
var path = require("path");
var app = express();
const port = 3000;

app.set("port", process.env.PORT || port);

app.route("http://url.com/query").all(function(req, res) {
  console.log("Query");
  res.send("Query Res");
  return;
});

app.use(express.static(__dirname, { extensions: ["html"] }));
app.use("/css", express.static(path.join(__dirname + "/css")));
app.use("/js", express.static(path.join(__dirname + "/js")));
app.use("/images", express.static(path.join(__dirname + "/images")));
app.use("/icons", express.static(path.join(__dirname + "/icons")));

app.listen(app.get("port"), () =>
  console.log("Started listening ons %s", app.get("port"))
);

Обновлена ​​функция

export async function queryDB(query) {
  const res = await fetch("http://url.com/query");

  try {
    if (res.ok) {
      console.log(res);
      return res;
    } else {
      // eslint-disable-next-line no-console
      console.log(res);
    }
  } catch (err) {
    // eslint-disable-next-line no-console
    console.log(err);
  }
}

1 Ответ

0 голосов
/ 19 мая 2019

Судя по комментариям, исправление должно заключаться в замене маршрута, который вы публикуете в своем коде, с app.route.get на app.route.post, если вы используете этот маршрут для эксклюзивной публикации, или app.route.all, если вы хотите и POST, и GET. функциональность.

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