Я использую сервер 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);
}
}