新手求助:Sails.js连接PostgreSQL无法写入数据问题
解决Sails.js + PostgreSQL写入数据后数据库无记录的问题
嘿,我来帮你排查这个问题!控制台输出"OK"但数据库没数据,这种情况大概率是几个容易忽略的配置或代码细节导致的,咱们一步步来解决:
1. 补全数据存储配置的关键项
你的config/datastores.js缺少了PostgreSQL适配器的指定,Sails.js需要明确知道用哪个数据库适配器来连接PostgreSQL,而且配置格式也有小问题。请修改成下面这样:
// config/datastores.js module.exports.datastores = { default: { adapter: 'sails-postgresql', // 必须添加这一行,指定PostgreSQL适配器 database: 'ticketing', host: 'localhost', user: 'root', password: 'root', port: 5434, poolSize: 10, ssl: false } };
同时别忘了安装对应的适配器包,在项目根目录执行:
npm install sails-postgresql
2. 验证模型与数据库的同步
Sails.js默认在开发环境下会自动根据模型创建数据库表,但如果同步失败,就会导致数据无法写入。你可以:
- 手动检查PostgreSQL数据库中是否存在
connecter表(Sails默认会将模型名转为小写单数作为表名,若未指定tableName); - 开启SQL日志调试,修改
config/log.js中的日志级别为debug,这样就能在控制台看到Sails执行的所有SQL语句,确认是否有INSERT操作被触发:
// config/log.js module.exports.log = { level: 'debug' };
3. 完善Create方法的调试逻辑
你的回调函数只输出了"OK",但并没有确认实际创建的记录。建议在回调中打印创建的对象,同时检查请求参数是否正确传递:
// controllers/ConnecterController.js module.exports = { connecter: function(req, res){ console.log("收到的请求参数:", req.allParams()); // 打印参数,确认是否完整 var nom = req.param("nom"); var prenom = req.param("prenom"); var categorie = req.param("categorie"); var password = req.param("password"); Connecter.create(req.allParams(), function connecterCreated(err, connecter){ if(err){ console.log("Erreur:" + err); return res.serverError(err); // 返回错误响应,方便前端调试 } else { console.log("成功创建的记录:", connecter); // 打印创建的记录对象 console.log("Ok"); res.view('pages/home', { nom: nom, prenom: prenom, categorie: categorie, password: password }); } }); } };
如果打印的connecter对象是undefined或者缺少字段,那说明参数传递有问题,需要检查前端请求的参数名是否和模型定义的一致。
4. 验证PostgreSQL连接的正确性
确认你的PostgreSQL服务确实运行在5434端口,并且用户root有权限访问ticketing数据库。可以用psql命令手动测试连接:
psql -h localhost -p 5434 -U root -d ticketing
输入密码root后,如果能正常进入数据库控制台,说明连接配置没问题;如果报错,需要检查数据库服务状态、端口、用户权限或密码。
按照上面的步骤逐一排查,应该就能解决数据无法写入的问题啦!
内容的提问来源于stack exchange,提问作者MIHAINGOHERILANTO
相关产品推荐
相关产品推荐

