【发布时间】:2019-05-10 11:35:52
【问题描述】:
我有这个模型叫做服务
/**
* Services.js
*
* @description :: A model definition represents a database table/collection.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
attributes: {
// ╔═╗╦═╗╦╔╦╗╦╔╦╗╦╦ ╦╔═╗╔═╗
// ╠═╝╠╦╝║║║║║ ║ ║╚╗╔╝║╣ ╚═╗
// ╩ ╩╚═╩╩ ╩╩ ╩ ╩ ╚╝ ╚═╝╚═╝
nameService: {
type: "string",
required: true,
description: "Full representation of the service's name.",
example: "Details of this particular service offered by the studio"
},
creditCost: {
type: "number",
required: true,
description: "The number of credits required for this service",
example: 2
},
creditsEarned: {
type: "number",
defaultsTo:0,
description: "The number of credits required for this service",
example: 200
},
price: {
type: 'number',
required: true,
description:"The original price of this service",
example:1500
},
rating: {
type: 'number',
defaultsTo:0,
min: 0,
max: 5,
},
// ╔═╗╔╦╗╔╗ ╔═╗╔╦╗╔═╗
// ║╣ ║║║╠╩╗║╣ ║║╚═╗
// ╚═╝╩ ╩╚═╝╚═╝═╩╝╚═╝
// ╔═╗╔═╗╔═╗╔═╗╔═╗╦╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
// ╠═╣╚═╗╚═╗║ ║║ ║╠═╣ ║ ║║ ║║║║╚═╗
// ╩ ╩╚═╝╚═╝╚═╝╚═╝╩╩ ╩ ╩ ╩╚═╝╝╚╝╚═╝
studioId:{
model:"Studios"
},
bookedServices:{
collection: 'BookedServices',
via: 'serviceId'
},
timings:{
collection: 'Timings',
via: 'serviceId'
}
},
};
这是我添加服务的操作文件。
由于某种原因,await Services.create 不起作用,并且由于未定义 serviceRecord,它返回此 badRequest 错误。但是,当我转而使用此处为 exec 的 Promise 时,我看到正在创建记录,但作为 exec 中的第二个参数的结果也未定义。
由于我不得不将studioId推送到服务中,所以在制作记录时我只好将它包含在其中,虽然这也显示了badRequest,但它正在将记录放入数据库中。
如果有人能告诉我问题的原因是什么,我们将不胜感激。我检查了我放入 Service 模型的参数的类型,它们确实匹配,serviceName 是字符串,creditCost 和 price 是数字。
/**
* studiosControllers/services/addServices.js
*
* @description :: Login action for studios.
* @help :: See https://sailsjs.com/docs/concepts/actions
*/
module.exports = {
friendlyName: "Add Services",
description: "Studios adding services.",
extendedDescription: `This action will do the part of adding services to the particular studio.`,
inputs: {
nameService: {
type: "string",
required: true,
description: "Full representation of the service's name.",
example: "We are a great studio that offer variety of services..."
},
creditCost: {
type: "number",
required: true,
description: "The number of credits required for this service",
example: 2
},
price: {
type: "number",
required: true,
description: "The original price of this service",
example: 1500
}
},
exits: {
success: {
description: "New service was created successfully."
},
invalid: {
responseType: "badRequest",
description: "Some of the provided details are invalid.",
extendedDescription:
"If this request was sent from a graphical user interface, the request " +
"parameters should have been validated/coerced _before_ they were sent."
}
},
fn: async function(inputs, exits) {
var { nameService, creditCost, price } = inputs;
console.log(typeof nameService);
console.log(typeof creditCost);
console.log(typeof price);
let newNameService = nameService.toLowerCase();
var serviceRecord;
Services.create({ nameService: newNameService, creditCost:creditCost, price:price,studioId:this.req.params.studioId }).exec(
function(err,result) {
if (err) {
return this.res.send(err);
}
console.log(err);
serviceRecord=result;
console.log(serviceRecord);
}
);
// try {
// serviceRecord = await Services.create({
// nameService: newNameService,
// creditCost,
// price
// });
// sails.log.info(serviceRecord);
// } catch (err) {
// switch (err.name) {
// case "UsageError":
// return this.res.badRequest(err);
// default:
// throw err;
// }
// }
// If there was info mismatch, throw invalid error
if (!serviceRecord) {
throw "invalid";
}
let id = this.req.studioId;
var studioRecord;
try {
studioRecord = await Studios.findOne({
id
});
studioRecord.services.add(serviceRecord);
studioRecord.save();
return exits.success({
message: "Service added successfully to the studio",
data: serviceRecord
});
} catch (err) {
switch (err.name) {
case "UsageError":
return this.res.badRequest(err);
default:
throw err;
}
}
}
};
编辑:-
这是另一个名为 Timings 的 api,即使这也有同样的问题。是我在创建新文档的过程中做错了什么还是其他什么?
时序模型:-
/**
* Timings.js
*
* @description :: A model definition represents a database table/collection.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
attributes: {
// ╔═╗╦═╗╦╔╦╗╦╔╦╗╦╦ ╦╔═╗╔═╗
// ╠═╝╠╦╝║║║║║ ║ ║╚╗╔╝║╣ ╚═╗
// ╩ ╩╚═╩╩ ╩╩ ╩ ╩ ╚╝ ╚═╝╚═╝
eventInTime: {
type: "ref",
required: true,
columnType: "datetime",
description: "The date of the event starting",
extendedDescription: `To store a date, make a date object with
'let date=new Date(year, month, day, hours, minutes, seconds, milliseconds)'
and then stringify it with 'JSON.stringify(date)' and then store it in the database
Send in "stringify" ed version of the date object to this input
`
},
eventOutTime: {
type: "ref",
required: true,
columnType: "datetime",
description: "The date of the event ending",
extendedDescription: `To store a date, make a date object with
'let date=new Date(year, month, day, hours, minutes, seconds, milliseconds)'
and then stringify it with 'JSON.stringify(date)' and then store it in the database
Send in "stringify" ed version of the date object to this input
`
},
numberOfSlotsAvailable: {
type: "number",
required: true,
description: "The number of available slots",
example: 15
},
// ╔═╗╔╦╗╔╗ ╔═╗╔╦╗╔═╗
// ║╣ ║║║╠╩╗║╣ ║║╚═╗
// ╚═╝╩ ╩╚═╝╚═╝═╩╝╚═╝
// ╔═╗╔═╗╔═╗╔═╗╔═╗╦╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
// ╠═╣╚═╗╚═╗║ ║║ ║╠═╣ ║ ║║ ║║║║╚═╗
// ╩ ╩╚═╝╚═╝╚═╝╚═╝╩╩ ╩ ╩ ╩╚═╝╝╚╝╚═╝
bookedServicesId:{
model:"BookedServices"
},
serviceId:{
model:"Services"
}
}
};
定时控制器:-
/**
timingsController/entrance/add-timings.js
*
* @description :: Action for adding timings to services.
* @help :: See https://sailsjs.com/docs/concepts/actions
* FIXME:
*/
module.exports = {
friendlyName: "Add timings",
description: "Studi`os adding timings for their services.",
extendedDescription: `This action will do the part of adding timings to the particular service.`,
inputs: {
eventInTime: {
type: "ref",
required: true,
columnType: "datetime",
description: "The date of the event starting",
extendedDescription: `To store a date, make a date object with
'let date=new Date(year, month, day, hours, minutes, seconds, milliseconds)'
and then stringify it with 'JSON.stringify(date)' and then store it in the database
Send in "stringify" ed version of the date object to this input
`
},
eventOutTime: {
type: "ref",
required: true,
columnType: "datetime",
description: "The date of the event ending",
extendedDescription: `To store a date, make a date object with
'let date=new Date(year, month, day, hours, minutes, seconds, milliseconds)'
and then stringify it with 'JSON.stringify(date)' and then store it in the database
Send in "stringify" ed version of the date object to this input
`
},
numberOfSlotsAvailable: {
type: "number",
required: true,
description: "The number of available slots",
example: 15
}
},
exits: {
success: {
description: "New timing record was created successfully."
},
invalid: {
responseType: "badRequest",
description: "Some of the provided details are invalid.",
extendedDescription:
"If this request was sent from a graphical user interface, the request " +
"parameters should have been validated/coerced _before_ they were sent."
}
},
fn: async function(inputs, exits) {
var moment = require("moment");
var { eventInTime,eventOutTime, numberOfSlotsAvailable } = inputs;
// var eventInTimeMix = moment(eventInTime);
// var eventInTimeDate = eventInTimeMix.utc().format("DD-MM-YYYY HH:mm a");
// console.log(`This is eventInTimeMix: ${eventInTimeMix}`)
// console.log(`This is eventInTimeDate: ${eventInTimeDate}`)
// var eventOutTimeMix = moment(eventOutTime);
// var eventOutTimeDate = eventOutTimeMix.utc().format("DD-MM-YYYY HH:mm a");
var timingRecord;
let serviceId = this.req.params.serviceId;
console.log(serviceId)
// timingRecord=await Timings.create({
// eventInTimeDate,
// eventOutTimeDate,
// numberOfSlotsAvailable,
// serviceId
// }).fetch()
// console.log(timingRecord)
Timings.create({eventInTime,
eventOutTime,
numberOfSlotsAvailable,
serviceId})
.exec(function(err, result) {
// if (err) {
// return this.res.send({err});
// }
// return this.res.status(200).send({ message: "Service added successfully" });
console.log(`This is the error ${err}`);
console.log(`This is the result ${result}`);
});
// try {
// timingRecord=await Timings.create({
// eventInTimeDate,
// eventOutTimeDate,
// numberOfSlotsAvailable,
// serviceId
// })
// } catch (err) {
// switch (err.name) {
// case "UsageError":
// return this.res.badRequest(err);
// default:
// throw err;
// }
// }
//FIXME: Remove the ommenting from the below line for verification
// If there was info mismatch, throw invalid error
if (!timingRecord) {
throw "invalid";
}
}
};
在控制器中,错误和结果的控制台日志语句由于某种原因返回未定义。
我能做些什么来解决这个问题?非常感谢任何帮助。
【问题讨论】:
-
您是如何遇到承诺不起作用的?如果您遇到错误,请同时提及。
-
我正在通过邮递员发送一个请求,它显示的错误是 badRequest 在此行触发 if(!studioRecord){throw "invalid";} invalid 在出口中定义,mSo 然后由原因,它应该仅在未创建记录时触发,这意味着创建不起作用,但后来当我检查数据库时创建了文档,这是个谜。但不仅在工作室,它也在服务中发生。我尝试删除所有节点包并安装它们,但无济于事。我正在查看是否错误地使用了 create 方法,但对我来说一切都很好
标签: sails.js sails-mongo