使用 Postman 在 Heroku 上测试 Express POST

Testing Express POST on Heroku with Postman

问题:当我使用Postman 测试用户创建POST 端点时,出现以下任一错误。

注意事项

Postman URIs attempted

[URI]/api/v1/users/test2@gmail.com/test/test

[URI]/api/v1/users?email=test2@gmail.com&firstName=test&lastName=test

代码:

app.post('/api/v1/users/:email/:firstName/:lastName', async(req, res) => {
try {
    const client =  await pool.connect();
    const result =  await client.query(
        `INSERT INTO users(id, email, first_name, last_name, created_date, last_session) VALUES (DEFAULT, ${req.params.email}, ${req.params.firstName}, ${req.params.lastName}, 'now()', 'now()') RETURNING *;`);
    const results = { 'results': (result) ? result.rows : null};
    res.json(results);
    client.release();
  } catch (err) {
    console.error(err);
    res.send("Error " + err);
  }})

堆栈: Node、Express、Postgres、Heroku(爱好计划)、Postman

问题出在解析传递给 URL 的参数上。我改为执行以下操作:

  • 更改代码以使用 bodyParser 接受请求的正文
  • 将请求中的参数存储在局部变量中
  • 包括在 ${] 周围添加单引号 --> '${}'

我现在可以将 Body 的内容写入数据库。

const express = require('express');
const app = express();
app.use(express.json());
const { Pool } = require('pg');
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
const User = require('./userClass.js');

const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
  ssl: {
    rejectUnauthorized: false
  }
});

/******* POST *******/
app.post('/api/v1/users', async(req, res) => {
    let newUser = new User(req.body.email, req.body.firstName, req.body.lastName);
    try {
        const client =  await pool.connect();
        const result =  await client.query(`INSERT INTO users(id, email, first_name, last_name, created_date, last_session) VALUES (DEFAULT, '${newUser.email}', '${newUser.firstName}', '${newUser.lastName}', 'now()', 'now()') RETURNING *;`);
        const results = { 'results': (result) ? result.rows : null};
        res.json(results);
        client.release();
      } catch (err) {
        console.error(err);
        res.send("Error " + err);
      }
})