简体   繁体   English

JSON Postman正文不适用于PostgreSQL插入

[英]JSON Postman body not working for PostgreSQL insert

I have an issue with my code in Node.js. 我在Node.js中的代码有问题。 I'm using PostgreSQL to manage my database side. 我正在使用PostgreSQL管理数据库方面。 But when I want to insert things and test in with Postman, I have constraint violation. 但是,当我想插入东西并用Postman进行测试时,我遇到了约束冲突。 In fact, all of my values that I want to insert are NULL. 实际上,我要插入的所有值都是NULL。

I supposed that my Postman JSON body doesn't work. 我以为我的Postman JSON正文不起作用。 But I kind of don't know why :/ 但我有点不知道为什么:/

Here is the code: 这是代码:

var express = require('express');
var router = express.Router();
const { Pool, Client } = require('pg');
const bodyParser = require('body-parser');

const client = new Client({
  user: process.env.DB_DBUSER,
  host: process.env.DB_HOST,
  database: process.env.DB_NAME,
  password: process.env.DB_PASS,
  port: process.env.DB_PORT,
})

const pool = new Pool({
  user: process.env.DB_DBUSER,
  host: process.env.DB_HOST,
  database: process.env.DB_NAME,
  password: process.env.DB_PASS,
  port: process.env.DB_PORT,
})

pool.on('error', (err, client) => {
  console.error('Unexpected error on idle client', err)
  process.exit(-1)
})

//Third-party middelware
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({
  extended: true
}));

router.post('/create_account', function (req, res, next) {

  // Grab data from http request
  const data = {
    username: req.body.username, name: req.body.user,
    firstname: req.body.firstname, email: req.body.email,
    location: req.body.location
  };

  const values = [data.username, data.name,
  data.firstname, data.email, data.location];

  pool.connect((err, client, done) => {
    if (err) throw err
    client.query('INSERT INTO Users(username, name,'
      + 'firstname, email, location) values($1, $2, $3, $4, $5)', values, (err, res) => {
        done();
        if (err) {
          throw err
        }
        console.log('user:', res.rows[0])
        pool.end()
      })
  });
})

module.exports = router;

Oc, in my postman body, I have this: 哦,在我的邮递员身上,我有这个:

{
    "username" : "Username",
    "name" : "Bob",
    "firstname" : "Paul",
    "email" : "spfqqds@gmail.com",
    "location" : "Here"
}

And my dependencies: 而我的依赖:

  "dependencies": {
    "body-parser": "^1.18.3",
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.9",
    "dotenv": "^6.0.0",
    "express": "~4.16.0",
    "http-errors": "~1.6.2",
    "morgan": "~1.9.0",
    "pg": "^6.1.0",
    "pg-hstore": "^2.3.2"
  },
  "devDependencies": {
    "chai": "^4.1.2",
    "mocha": "^5.2.0"
  }

The SQL: SQL:

const queryUser = client.query(
  'CREATE TABLE IF NOT EXISTS Users('
  + 'user_id SERIAL,'
  + 'username VARCHAR(40) NOT NULL UNIQUE,'
  + 'name VARCHAR(40) NOT NULL,'
  + 'firstname VARCHAR(40) NOT NULL,'
  + 'email VARCHAR(60) UNIQUE,'
  + 'location Varchar(60) NOT NULL,'
  + 'CONSTRAINT pk_user PRIMARY KEY (user_id))',

  (err, res) => {
    if (err) throw err
    console.log("TABLE USERS : " + res)
  });

This is my error: 这是我的错误:

error: une valeur NULL viole la contrainte NOT NULL de la colonne « username »
    at Connection.parseE (C:\Users\Amaris\Desktop\NodeJS_Projects\basefugees-dev-backend\node_modules\pg\lib\connection.js:554:11)
    at Connection.parseMessage (C:\Users\Amaris\Desktop\NodeJS_Projects\basefugees-dev-backend\node_modules\pg\lib\connection.js:381:17)
    at Socket.<anonymous> (C:\Users\Amaris\Desktop\NodeJS_Projects\basefugees-dev-backend\node_modules\pg\lib\connection.js:117:22)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    at Socket.Readable.push (_stream_readable.js:208:10)
    at TCP.onread (net.js:597:20)

I've tried your code with minor modifications, and it worked. 我已经尝试过对您的代码进行一些小的修改,并且它起作用了。

Here is SQL 这是SQL

CREATE TABLE public.users
(
  username character varying,
  name character varying,
  firstname character varying,
  email character varying,
  location character varying,
  id integer NOT NULL DEFAULT nextval('users_id_seq'::regclass),
  CONSTRAINT users_pkey PRIMARY KEY (id)
)

And Node Js 和Node Js

const express = require('express');
const app = express();
const router = express.Router();
const {
    Pool,
    Client
} = require('pg');
const bodyParser = require('body-parser');

// const client = new Client({
//   user: process.env.DB_DBUSER,
//   host: process.env.DB_HOST,
//   database: process.env.DB_NAME,
//   password: process.env.DB_PASS,
//   port: process.env.DB_PORT,
// })

const pool = new Pool({
    user: 'postgres',
    host: 'localhost',
    database: 'postgres',
    password: 1,
    port: 5432,
});

pool.on('error', (err, client) => {
    console.error('Unexpected error on idle client', err);
    process.exit(-1)
});

//Third-party middelware
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({
    extended: true
}));

router.post('/create_account', function(req, response, next) {

    // Grab data from http request
    const data = {
        username: req.body.username,
        name: req.body.user,
        firstname: req.body.firstname,
        email: req.body.email,
        location: req.body.location
    };

    const values = [
        data.username,
        data.name,
        data.firstname,
        data.email,
        data.location
    ];

    pool.connect((err, client, done) => {
        if (err)
            throw err;
        client.query('INSERT INTO users(username, name, firstname, email, location) values($1, $2, $3, $4, $5)', values, (err, res) => {
            done();
            if (err) {
                next(err);
                throw err
            }
            response.send('ok');
            console.log('user:', res.rows[0]);
            pool.end()
        })
    });

});
app.use(router);
app.listen(3000, () => {
    console.log('SERVER STARTED ON PORT 3000');
});

Finally here is my Postman call 最后是我的邮递员电话

邮差 Hope it helps!)) 希望能帮助到你!))

Not the best in node.js , so don't freak out if I'm asking something stupid... but, are those const correct? 不是node.js中最好的,所以如果我要问一些愚蠢的事情,请不要惊慌……但是,那些const正确吗?

If node.js is anything like any other language, that means "constant" and you cannot change value to a constant (by definition). 如果node.js与任何其他语言一样,则表示“常量”,并且您不能将值更改为常量 (按定义)。

Hope it helps! 希望能帮助到你!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM