Mem*_*his 5 mysql node.js express typescript angular
我最近开始使用 MySQL 作为我的 Angular/NodeJS 项目的数据库(我一直在使用 MongoDB)。尽管如此,我在处理 HTTP 请求时遇到了问题。到目前为止,我已经尝试过 GET 和 POST 请求,并且 GET 永远处于待处理状态,直到失败,并且 POST 也不会发布到后端和数据库。当然,除了查询之外,我确实没有更改 MongoDB 数据库使用的后端配置。
我尝试调试后端以检查服务器是否实际运行并且一切正常。只是到达指定端点的请求始终处于待处理状态。如果请求到达某个端点,我还尝试记录到控制台,但不幸的是,没有记录任何内容。
服务器.js
const app = require("./backend/app");
const debug = require("debug")("node-angular");
const http = require("http");
const normalisePort = setPort => {
const port = parseInt(setPort, 10);
if (isNaN(port)) return setPort;
if (port >= 0) return port;
return false;
};
const port = normalisePort(process.env.PORT || "8000");
const server = http.createServer(app);
const error = error => {
if (error.syscall !== "listen") {
throw error;
}
const bind = typeof port === "string" ? "pipe " + port : "port " + port;
switch (error.code) {
case "EACCES":
console.error(bind + " requires elevated privileges");
process.exit(1);
break;
case "EADDRINUSE":
console.error(bind + " is already in use");
process.exit(1);
break;
default:
throw error;
}
};
const listening = () => {
const address = server.address();
const bind = typeof port === "string" ? "pipe " + address : "port " + port;
debug.enabled = true;
debug("Listening on " + bind);
};
app.set("port", port);
server.on("error", error);
server.on("listening", listening);
server.listen(port, "localhost");
Run Code Online (Sandbox Code Playgroud)
应用程序.js
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const users = require("./routes/users");
const app = express();
app.use(cors);
app.use(bodyParser.json());
app.use(
bodyParser.urlencoded({
extended: false
})
);
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Authorization, Content-Type, Accept"
);
res.setHeader(
"Access-Control-Allow-Methods",
"GET, POST, PATCH, DELETE, OPTIONS"
);
next();
});
app.get("/api/users", users);
module.exports = app;
Run Code Online (Sandbox Code Playgroud)
用户.js
const express = require("express");
const router = express.Router();
const db = require("../sql-connection");
router.get("", (req, res, next) => {
db.query("select * from users;", (error, results, fields) => {
if (results.length > 0) {
return res.status(200).send(results);
} else {
return res.status(404).send();
}
});
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
sql-connection.js
const mysql = require("mysql");
const sqlConnection = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "payroll"
});
sqlConnection.connect(error => {
if (error) throw error;
console.log("connected to database");
});
module.exports = sqlConnection;
Run Code Online (Sandbox Code Playgroud)
auth.service.ts
const app = require("./backend/app");
const debug = require("debug")("node-angular");
const http = require("http");
const normalisePort = setPort => {
const port = parseInt(setPort, 10);
if (isNaN(port)) return setPort;
if (port >= 0) return port;
return false;
};
const port = normalisePort(process.env.PORT || "8000");
const server = http.createServer(app);
const error = error => {
if (error.syscall !== "listen") {
throw error;
}
const bind = typeof port === "string" ? "pipe " + port : "port " + port;
switch (error.code) {
case "EACCES":
console.error(bind + " requires elevated privileges");
process.exit(1);
break;
case "EADDRINUSE":
console.error(bind + " is already in use");
process.exit(1);
break;
default:
throw error;
}
};
const listening = () => {
const address = server.address();
const bind = typeof port === "string" ? "pipe " + address : "port " + port;
debug.enabled = true;
debug("Listening on " + bind);
};
app.set("port", port);
server.on("error", error);
server.on("listening", listening);
server.listen(port, "localhost");
Run Code Online (Sandbox Code Playgroud)
注册.组件.ts
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const users = require("./routes/users");
const app = express();
app.use(cors);
app.use(bodyParser.json());
app.use(
bodyParser.urlencoded({
extended: false
})
);
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Authorization, Content-Type, Accept"
);
res.setHeader(
"Access-Control-Allow-Methods",
"GET, POST, PATCH, DELETE, OPTIONS"
);
next();
});
app.get("/api/users", users);
module.exports = app;
Run Code Online (Sandbox Code Playgroud)
当订阅用户时,来自后端的可观察数据应记录到控制台(如果存在),否则,控制台上将记录“无数据”。不幸的是,这个请求需要永远(待处理)。但是,如果我不订阅用户,则在开发工具的网络选项卡下不会发送/看到任何请求。
小智 0
我一直在使用 MYSQL 数据库,我建议使用mysql2overmysql
mysql2提供基于承诺的语法而不是传统的回调方法。
这是 Nodejs 的 Mysql2 的文档。
谈到这个问题,我想这可能是因为Nodejs是异步的,而您在设置 API 时使用同步方法。此外,当您使用异步编程时,您必须使用try-catch-finally而不是传统的if-else语句来记录错误。
所以你可以使用async (req, res, next)=>{ //your code here }而不仅仅是使用(req, res, next)=>{ //your code here }.
你还必须await在调用 sql 查询之前,即;
await db.query
或者
相反,在 mysql2 中它更容易使用const [data] = await pool.execute(query, [params])。
| 归档时间: |
|
| 查看次数: |
4764 次 |
| 最近记录: |