const express = require('express'); const app = express(); const sql = require('mssql'); // SQL Server 数据库配置 const config = { server: '192.168.10.223', user: 'sa', password: 'Servo01', database: 'demo', options: { encrypt: true // 如果需要 SSL 连接,设置为 true } }; app.post('/register', function(req, res) { const {name, email, password } = req.body; // 连接 SQL Server 数据库 sql.connect(config, function(err) { if (err) { console.log(err); res.status(500).send('数据库连接失败'); return; } // 执行插入操作 const query = `INSERT INTO username (name, email, password) VALUES ('${name}', '${email}', '${password}')`; new sql.Request().query(query, function(err, result) { if (err) { console.log(err); res.status(500).send('注册失败'); return; } res.send('注册成功'); }); }); }); app.listen(port, function() { console.log(`Server running on port ${port}`); });为什么注册页面数据不能到数据库
时间: 2024-04-14 14:27:03 浏览: 78
node.js + express + sqlserver构建简单的后台服务
5星 · 资源好评率100%
在你提供的代码中,有一些问题可能导致注册页面的数据无法写入数据库。
首先,你需要确保数据库连接配置是正确的。请确保`config`对象中的服务器地址、用户名、密码和数据库名称是正确的。如果连接配置不正确,将无法连接到数据库。
其次,你需要确保`req.body`中包含了正确的用户注册数据。在你的代码中,你使用了解构赋值来获取`req.body`中的`name`、`email`和`password`属性。确保在发起注册请求时,请求体中包含了这些属性,并且数据格式是正确的。
另外,请注意你执行插入操作时使用的SQL语句。在你的代码中,插入操作是通过拼接字符串的方式构建的SQL语句。然而,这种方式存在SQL注入的风险,并且容易受到特殊字符的影响。为了避免这个问题,建议使用参数化查询来执行插入操作。
以下是使用参数化查询改进的代码示例:
```javascript
app.post('/register', function(req, res) {
const { name, email, password } = req.body;
// 连接 SQL Server 数据库
sql.connect(config, function(err) {
if (err) {
console.log(err);
res.status(500).send('数据库连接失败');
return;
}
// 执行插入操作
const query = 'INSERT INTO username (name, email, password) VALUES (@name, @email, @password)';
const request = new sql.Request();
request.input('name', sql.NVarChar, name);
request.input('email', sql.NVarChar, email);
request.input('password', sql.NVarChar, password);
request.query(query, function(err, result) {
if (err) {
console.log(err);
res.status(500).send('注册失败');
return;
}
res.send('注册成功');
});
});
});
```
在这个示例中,我们使用了参数化查询来执行插入操作。通过在SQL语句中使用占位符(例如`@name`、`@email`、`@password`)来表示要插入的值,并且使用`request.input()`方法来指定参数的类型和值。
这样做的好处是,参数化查询可以帮助防止SQL注入攻击,并且自动处理特殊字符的转义,确保数据的安全性和准确性。
请注意,你还需要确保在发起注册请求时,请求体中包含了正确的`name`、`email`和`password`属性,并且数据格式是正确的。另外,你需要根据实际需求修改`port`变量,确保服务器监听的端口与你的应用程序配置一致。
阅读全文