Javascript MySQL使用nodejs将新用户插入数据库
我正在尝试使用nodejs和mysql注册一个新用户。我对mysql语法不太熟悉,所以我可能做错了什么,但我有以下几点:Javascript MySQL使用nodejs将新用户插入数据库,javascript,mysql,node.js,Javascript,Mysql,Node.js,我正在尝试使用nodejs和mysql注册一个新用户。我对mysql语法不太熟悉,所以我可能做错了什么,但我有以下几点: app.post('/createNewUser', (req, res) => { let newUsername = req.body.newUsername; let newPassword = req.body.newPassword; let newData = 'INSERT INTO users (username, password) VAL
app.post('/createNewUser', (req, res) => {
let newUsername = req.body.newUsername;
let newPassword = req.body.newPassword;
let newData = 'INSERT INTO users (username, password) VALUES (newUsername, newPassword)';
db.query(newData, function(err, result) {
if (err) throw err;
console.log('New user registered');
});
});
它给我的错误是“字段列表中的未知列'newUsername',它说变量从未使用过,所以我假设它是以字符串的形式读取的?但我不确定如何将它作为变量传入,而不是在引号中。根据,它应该是这样的:
let newData = 'INSERT INTO users (username, password) VALUES (?, ?)';
// Placeholders −^−−^
db.query(newData, [newUsername, newPassword], function(err, result) {
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^−− Values for them
if (err) throw err;
console.log('New user registered');
});
doQuery({
sql: 'INSERT INTO users (username, password) VALUES (:newUsername, :newPassword)',
parameters: {newUsername, newPassword}
}, function(err, result) {
if (err) {
// Handle/report error
} else {
console.log('New user registered');
}
});
或者像这样(你可以选择):
这是一种相当常见的模式,使用?
将值放入其中,然后在数组中单独提供值,或者使用某种索引(在我看来,这不是最好的方法,但如果您使用的是模块的话…)
我希望占位符有名称,我可能会使用这样的函数将名称转换为?
:
function doQuery(options, callback) {
let {sql, parameters, ...rest} = options;
const values = [];
for (const name in parameters) {
sql = sql.replace(":" + name, "?");
values.push(parameters[value]);
}
db.query({sql, values, ...rest}, callback);
}
然后你会这样使用它:
let newData = 'INSERT INTO users (username, password) VALUES (?, ?)';
// Placeholders −^−−^
db.query(newData, [newUsername, newPassword], function(err, result) {
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^−− Values for them
if (err) throw err;
console.log('New user registered');
});
doQuery({
sql: 'INSERT INTO users (username, password) VALUES (:newUsername, :newPassword)',
parameters: {newUsername, newPassword}
}, function(err, result) {
if (err) {
// Handle/report error
} else {
console.log('New user registered');
}
});
旁注:
if(err)throw err;
通常是Node.js回调的反模式。您在调用回调的代码中抛出错误,而不是在自己的代码中。最好有一种处理/报告错误的方法。查看您正在使用的MySQL连接库的文档。它告诉您如何使用参数化查询/如何放置参数进入查询。(警告:不要进行字符串连接;)看着这些文档,我仍然很困惑,不确定我是否找对了地方:是的,这很有效!是的,我开始意识到node js可能不是mysql使用的最佳工具,但我认为先学习sql数据库比先学习nosql数据库更有用。谢谢你的帮助!@john4ster-node.js只是一个例子e用于与MySQL对话,但有几个模块可以实现。我对答案进行了一些更新,以展示如何使用?
:-)在该答案周围添加一个包装,以减少出错的机会