express - 在 Express 中处理 POST 和 GET 请求
问题描述
第一次在这里使用快递。
我的app.js
文件中有以下内容:
const express = require("express");
const mysql = require("mysql");
const app = express();
const PORT = process.env.PORT || 8000;
const connection = mysql.createConnection({
host: "localhost",
user: "admin",
password: "password",
database: "mydb",
});
app.use(express.static(__dirname + "/express"));
app.use(express.urlencoded()); // have also tried with "extended: true" and "extended: false"
app.use(express.json());
// GET
app.get("/getAllUserActivity", (req, res) => {
const order = req.query.order || "id";
const page = req.query.page || 0;
const limit = req.query.limit || 100;
connection.connect((err) => {
if (err) throw err;
connection.query(
"SELECT id, username, counter FROM users ORDER BY ? LIMIT ?,?",
[order, page, limit],
(err, results, fields) => {
if (err) throw err;
res.send(results);
}
);
});
});
// POST
app.post("/updateUserActivity", (req, res) => {
const userId = req.body.userId;
const username = req.body.username;
const counter = req.body.counter;
connection.connect((err) => {
if (err) throw err;
connection.query(
"INSERT INTO users (id, username, counter) VALUES (?, ?) ON DUPLICATE KEY UPDATE counter = counter + ?",
[userId, username, counter],
(err, results, fields) => {
if (err) throw err;
res.send(results);
}
);
});
});
我的 POST 请求有 header "Content-Type": "application/x-www-form-urlencoded"
。
我面临的问题有两个:
- GET 请求每隔一段时间就会失败。第一次它返回预期的数据,但第二次我得到
Incomplete response received from application
- 重复。 - 我只能让POST或GET 请求工作 - 取决于我如何设置中间件。我怎样才能在这里同时拥有 GET 和 POST ?
老 php 用户在这里,试图弄清楚 Express。谢谢!
解决方案
将所有替换if (err) throw err;
为将实际错误响应发送回客户端。您必须始终对每个传入请求发送某种形式的响应。很遗憾,许多演示代码都表明,if (err) throw err;
因为在异步回调中,这几乎不是正确的代码。
然后(虽然我不知道你的数据库的具体细节)你需要在使用它们之后释放/关闭你的数据库连接,这样它们就不会泄漏。或者,您可以使用一组连接池,在执行查询后它们会自动返回到池中。
推荐阅读
- c# - 分页 Newtonsoft.Json
- python - 将彩色文本放入熊猫数据框 python
- java - Log4j 不读取大写字母
- git - 如何停止忘记更改每个 git 项目的身份
- javascript - 如何在我的视图中加载外部网站 ASP.NET Core
- java - Firebase 实时数据库更新数据 - Android Java
- linux - bash 脚本上的“缓存”凭据
- powerbuilder - PB App 仅适用于旧版 SQL Server,但不适用于新版 SQL Server。使困惑
- java - 使用 Jackson 反序列化的实例化集合类型而不是初始化一个新集合类型?
- android - 如何将值从 RecyclerView 项目传递和显示到其他活动?