[英]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 最后是我的邮递员电话
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.