首页 > 解决方案 > 在 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"

我面临的问题有两个:

  1. GET 请求每隔一段时间就会失败。第一次它返回预期的数据,但第二次我得到Incomplete response received from application- 重复。
  2. 我只能让POSTGET 请求工作 - 取决于我如何设置中间件。我怎样才能在这里同时拥有 GET 和 POST ?

老 php 用户在这里,试图弄清楚 Express。谢谢!

标签: express

解决方案


将所有替换if (err) throw err;为将实际错误响应发送回客户端。您必须始终对每个传入请求发送某种形式的响应。很遗憾,许多演示代码都表明,if (err) throw err;因为在异步回调中,这几乎不是正确的代码。

然后(虽然我不知道你的数据库的具体细节)你需要在使用它们之后释放/关闭你的数据库连接,这样它们就不会泄漏。或者,您可以使用一组连接池,在执行查询后它们会自动返回到池中。


推荐阅读