我正在本地主机(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);
}
}
答案 0 :(得分:0)
从注释中判断,如果您使用的是专门发布的路由,则修复应该是将代码中的发布路由从app.route.get
替换为app.route.post
您希望同时具有POST和GET功能。