我是 node.js 的新手我正在嘗試使用 express.js、vanilla JS、CSS、HTML 和MySql.
下面是處理路由以及決議客戶端發出的由用戶名和密碼組成的 HTTP Post 請求的代碼。用戶名和密碼都存盤在fields.username與fields.password
函式userRegistration(...)和userLogin(...)在 db.js 中定義(顯示在最后);他們從那里出口db.js和進口users.js
用戶.js
router.post('/register', (req, res, next) => {
const form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
var userInfoArray = [fields.username, fields.password]
db.userRegistration(userInfoArray)
})
});
router.post('/login', (req, res, next) => {
const form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
var userInfoArray = [fields.username, fields.password]
db.userLogin(userInfoArray)
})
});
我創建了userinfo表來存盤用戶名和密碼。如下所示,我通過 HTTP post 方法獲取用戶名和密碼。我現在用的決議
強大的模塊,這給了我fields.username和fields.password值。我正在使用 query(...) 方法查詢資料庫,提供實際 SQL 作為字串命名registrationQueryString(將條目插入表中)和loginQueryString(查找提供的用戶名和密碼是否在資料庫中)
資料庫.js
var username, password;
var userInfoArray = [username, password]
const registrationQueryString = "INSERT INTO (username, password) userinfo VALUES ( ?, ? )"
const loginQueryString = "SELECT (username, password) FROM userinfo WHERE EXISTS (SELECT (username, password) FROM userinfo WHERE username = (?) AND password = (?))"
function userRegistration (userInfoArray){
dbConnection.query( registrationQueryString, userInfoArray, function(err, results, fields) {
if (err) throw err
console.log(results)
})
}
function userLogin (userInfoArray){
dbConnection.query( loginQueryString, userInfoArray, function(err, results, fields) {
if (err) throw err
console.log(results)
})
}
它給了我一個錯誤
“wer”是我作為用戶名和密碼提供的隨機值
Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(username, password) userinfo VALUES ( 'wer', 'wer' )' at line 1
at Query.Sequence._packetToError (F:\dr.server\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
at Query.ErrorPacket (F:\dr.server\node_modules\mysql\lib\protocol\sequences\Query.js:79:18)
at Protocol._parsePacket (F:\dr.server\node_modules\mysql\lib\protocol\Protocol.js:291:23)
at Parser._parsePacket (F:\dr.server\node_modules\mysql\lib\protocol\Parser.js:433:10)
at Parser.write (F:\dr.server\node_modules\mysql\lib\protocol\Parser.js:43:10)
at Protocol.write (F:\dr.server\node_modules\mysql\lib\protocol\Protocol.js:38:16)
at Socket.<anonymous> (F:\dr.server\node_modules\mysql\lib\Connection.js:88:28)
at Socket.<anonymous> (F:\dr.server\node_modules\mysql\lib\Connection.js:526:10)
at Socket.emit (events.js:400:28)
at addChunk (internal/streams/readable.js:290:12)
--------------------
at Protocol._enqueue (F:\dr.server\node_modules\mysql\lib\protocol\Protocol.js:144:48)
at Connection.query (F:\dr.server\node_modules\mysql\lib\Connection.js:198:25)
at Object.userRegistration (F:\dr.server\db.js:29:18)
at F:\dr.server\routes\users.js:12:8
at zalgoSafe (F:\dr.server\node_modules\dezalgo\dezalgo.js:20:10)
at f (F:\dr.server\node_modules\once\once.js:25:25)
at IncomingForm.<anonymous> (F:\dr.server\node_modules\formidable\src\Formidable.js:183:9)
at IncomingForm.emit (events.js:400:28)
at IncomingForm._maybeEnd (F:\dr.server\node_modules\formidable\src\Formidable.js:612:10)
at QuerystringParser.<anonymous> (F:\dr.server\node_modules\formidable\src\plugins\querystring.js:36:10) {
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(username, password) userinfo VALUES ( 'wer', 'wer' )' at line 1",
sqlState: '42000',
index: 0,
sql: "INSERT INTO (username, password) userinfo VALUES ( 'wer', 'wer' )"
}
我知道我的 SQL 查詢有問題,但我無法弄清楚。任何幫助將受到歡迎。如果這些資訊還不夠,我可以通過 github 提供特定的代碼。
uj5u.com熱心網友回復:
還不能添加評論。您是否嘗試將 SQL 陳述句更改為:
INSERT INTO tbl_name (col_name, col_name) VALUES ('value', 'value')
"INSERT INTO userinfo (username, password) VALUES ( 'wer', 'wer' )"
https://dev.mysql.com/doc/refman/8.0/en/insert.html
編輯:
在您的帖子中:
它給了我一個錯誤
我知道我的 SQL 查詢有問題,但我無法弄清楚。
上面的代碼并不意味著是答案。正如我之前提到的,目前無法發表評論。上面的代碼只是指向正確答案的指標。您必須將 MySQL 查詢更改為上述語法。提供的鏈接為您提供了正確的語法。
uj5u.com熱心網友回復:
“插入userinfo(用戶名,密碼)值('wer','wer');”
uj5u.com熱心網友回復:
您可以使用模板文字來做到這一點。
var username, password;
const registrationQueryString = `INSERT INTO (username, password) userinfo VALUES ('${username}', '${password}')`
然后registrationQueryString用作原始查詢。
請記住,這是一個 ES2015 功能,應該在任何最新版本的 Node.js 中可用。更多關于MDN Web Docs 的模板文字
uj5u.com熱心網友回復:
首先更新這個查詢
INSERT INTO (username, password) userinfo VALUES ( ?, ? )
到
INSERT INTO userinfo (username, password) VALUES ( ?, ? )
然后停止使用這種型別的查詢
SELECT (username, password) FROM userinfo WHERE EXISTS (SELECT (username, password) FROM userinfo WHERE username = (?) AND password = (?))
將其替換為以下內容
const ObjQr = [
req.body.username,
req.body.password
];
const SsQl = "CALL SpSelectUser(?,?)";
query(SsQl, ObjQr, (err,results,fields) => {
if(err) {
res.send('ERROR');
}
else {
const Info= {
UserInfo : results[0]
};
res.json(Info);
}
});
盡量使用 StoredProcedure 而不是直接查詢,以避免競爭條件和 Sql-Injection。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/356418.html
標籤:javascript mysql sql 节点.js 表达
