所以我使用POSTGRES SQL,PGADMIN 3和NODE.JS來寫我的SQL查詢。在我的node.js我的代碼如下所示: -返回重複用戶SQL
var express = require('express'),
cors = require('cors'),
massive = require('massive'),
bodyParser = require('body-parser');
var app = module.exports = express();
app.use(bodyParser.json());
app.use(cors());
app.use(express.static(__dirname + '/public'));
//MASSIVE//
var massiveUrl = 'postgres://localhost/cart';
var massiveServer = massive.connectSync({
connectionString: massiveUrl
});
app.set('db', massiveServer);
var db = app.get('db');
//ENDPOINTS//
app.post('/api/user', function(req, res, next) {
db.user_create([req.body.name,req.body.email],function(err, user) {
console.log('user is this: ', user);
if(err) {
res.status(500).send(err);
}
console.log(user[0].userid);
db.order_create([user[0].userid], function(err, order) {
console.log('order is this: ', order);
if(err) {
return res.status(500).send(err)
}
res.status(200).send('User and Order created successfully');
})
})
});
app.get('/api/user', function(req, res, next) {
db.users(function(err, users) {
if(err) {
res.status(500).send(err);
}
res.status(200).send(users);
})
});
app.listen(3333, function() {
console.log("Listening on port 3333");
});
我user_create.sql,order_create.sql和users.sql文件看起來像這樣: -
users.sql:-
SELECT *
FROM users
user_create.sql:-
INSERT INTO users (name, email)
VALUES ($1, $2)
RETURNING *;
order_create.sql
INSERT INTO orders (user_id)
VALUES ($1);
的問題是,當我郵寄郵遞員使用POST和URL'/ api/user給它一個名稱和電子郵件{「名稱」:「山姆」,「電子郵件」:「[email protected]」}它生成一個order_id表與給定的user_id。所以我的用戶表有一些像userid:1名稱:山姆,電子郵件:[email protected]。現在用戶標識被設置爲一個串行主鍵。這個想法是,一個用戶會有很多訂單。所以當我使用{「name」:「Sam」,「email」:「[email protected]」}再次發佈相同的信息時,我得到一個新的userid:2名稱:Sam電子郵件:[email protected]。顯然這是錯誤的。它不應該給我另一個用戶ID,因爲它是同一個用戶!
Table structure:-
create table users
(
userid SERIAL PRIMARY KEY,
name VARCHAR(40),
email VARCHAR(255)
)
create table orders
(
id INTEGER,
user_id INTEGER references users(userid),
amounttotal float
)
我該如何防止創建一個訂單,而不是讓山姆兩次用不同的用戶ID? 謝謝