在Sails框架中实现添加到集合的方法指导(附Place Model代码)
在Sails.js中实现Place模型的集合添加功能
看起来你已经搭好了Place模型的基础属性框架,接下来我会一步步带你完成把新数据添加到集合(对应数据库表)的功能,在Sails里这个操作其实很直观~
第一步:完善Place模型(可选但推荐)
先把你提供的模型代码补全并优化下(看你最后代码没写完,我先假设是遗漏了部分属性,不影响核心功能),给常用属性加上合理的约束:
// api/models/Place.js module.exports = { attributes: { title: { type: 'string', required: true // 确保标题必填 }, body: { type: 'string', columnType: 'text' }, address: { type: 'string', columnType: 'text' }, x_map: { type: 'number', columnType: 'float', required: true // 经纬度必填更合理 }, y_map: { type: 'number', columnType: 'float', required: true }, like: { type: 'number', columnType: 'integer', defaultsTo: 0 // 默认点赞数设为0 }, dis_like: { type: 'number', columnType: 'integer', defaultsTo: 0 }, visited: { type: 'number', columnType: 'integer', defaultsTo: 0 }, // 你没写完的属性可以在这里补充,比如emt: { type: 'string' } } };
第二步:编写控制器处理创建请求
在api/controllers/目录下新建PlaceController.js,添加一个create动作来处理添加数据的逻辑:
// api/controllers/PlaceController.js module.exports = { // 新增Place到集合 async create(req, res) { try { // 从请求体获取数据,创建后返回刚插入的记录 const newPlace = await Place.create(req.body).fetch(); // 返回201状态码(表示资源创建成功)和数据 return res.status(201).json({ status: 'success', data: newPlace }); } catch (err) { // 捕获并返回错误,比如必填项缺失、数据类型不匹配等 return res.status(400).json({ status: 'error', message: err.message || '创建Place失败,请检查输入' }); } } };
这里用async/await处理异步操作,fetch()方法能让我们拿到刚创建的完整数据,方便前端确认结果。
第三步:配置路由映射
打开config/routes.js,添加一条POST路由,让前端可以访问到这个创建接口:
// config/routes.js module.exports.routes = { // 其他已有的路由... 'POST /api/places': 'PlaceController.create' };
这样前端就可以通过POST请求/api/places来提交新的Place数据了。
第四步:测试添加功能
你可以用工具或者前端代码来验证这个接口:
用curl测试(终端执行):
curl -X POST -H "Content-Type: application/json" -d '{ "title": "我的打卡点", "body": "这里风景超棒", "address": "上海市黄浦区", "x_map": 121.473701, "y_map": 31.230416 }' http://localhost:1337/api/places
如果成功,你会收到返回的新Place数据,同时数据库里也会新增一条记录。
前端JavaScript调用示例:
async function addNewPlace() { const placeData = { title: "我的打卡点", body: "这里风景超棒", address: "上海市黄浦区", x_map: 121.473701, y_map: 31.230416 }; try { const response = await fetch('/api/places', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(placeData) }); const result = await response.json(); console.log('创建成功:', result); } catch (err) { console.error('创建失败:', err); } } // 调用函数触发添加 addNewPlace();
额外小提示:增强数据验证
如果需要更严格的规则,比如限制经纬度的范围,可以在模型里添加自定义验证:
x_map: { type: 'number', columnType: 'float', required: true, min: -180, // 经度范围限制 max: 180 }, y_map: { type: 'number', columnType: 'float', required: true, min: -90, // 纬度范围限制 max: 90 }
这样如果传入不符合要求的数据,Sails会自动返回错误,不用你手动处理校验逻辑。
内容的提问来源于stack exchange,提问作者mas cm
相关产品推荐
相关产品推荐

