【发布时间】:2019-05-18 19:58:39
【问题描述】:
我在本地主机 (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"))
);
使用 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);
}
}
【问题讨论】:
-
Namecheap 可能会为您提供端口 80,因此您可能必须更改端口常量变量才能从环境令牌中获取它
-
请注意,从 URL 运行任意查询是一个非常糟糕的想法。
-
@vortex 我目前正在为端口使用环境变量。名称便宜的端口是 8080
-
@ZackArnett 您是否按照namecheap.com/support/knowledgebase/article.aspx/10047/2182/… 中的说明正确配置了应用程序?
-
@vortex 是的。这就是我遵循的目标。节点服务器正在运行并托管该站点。
标签: javascript node.js express