Express App GET路由在生产环境中不起作用

时间:2019-05-18 19:58:39

标签: javascript node.js express

我正在本地主机(DEV)和NameCheap(PROD)上运行Node JS服务器。

两个环境都运行服务器。两者都托管Web应用程序。我遇到的问题是尝试在Javascript中使用FETCH API时。

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"))
);

使用提取功能

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 :(得分:0)

从注释中判断,如果您使用的是专门发布的路由,则修复应该是将代码中的发布路由从app.route.get替换为app.route.post您希望同时具有POST和GET功能。