ข้อผิดพลาดในการส่ง: การส่งไปยังสตริงล้มเหลวสำหรับค่าเมื่อพยายามค้นหา

ฉันประสบปัญหาแปลก ๆ ที่นี่ ฉันสามารถบันทึกข้อมูลผ่านพังพอนได้ แต่ไม่สามารถสืบค้นได้ นี่คือรหัส:

const mongoose = require('mongoose');
const Schema   = mongoose.Schema;

const CategorySchema = new Schema({
  store : {type: String, required: true, unique: true},
  categories : [{
    parent : String,
    name : String,
  }],
});

CategorySchema.index({store: 1, update_at: -1});

module.exports = mongoose.model('Category', CategorySchema);

เมื่อฉันพยายามค้นหา ฉันได้รับข้อผิดพลาดนี้:

(โหนด: 7412) UnhandledPromiseRejectionWarning: การปฏิเสธสัญญาที่ไม่สามารถจัดการได้ (id การปฏิเสธ: 1): ValidationError: CastError: Cast to String ล้มเหลวสำหรับค่า "{ _id: 58dd019b1a06731b0990b878, ร้านค้า: 'ชื่อร้านค้า-ที่นี่', หมวดหมู่: [], __v: 0 }" ที่เส้นทาง "ร้านค้า"

ฉันมีสคีมาที่คล้ายกันมากสำหรับคอลเลกชันอื่นๆ ซึ่งทำงานได้ดีแต่ไม่ใช่อันนี้

นี่คือวิธีที่ฉันทำแบบสอบถาม:

Category.findOne({store: 'Store-Name-Here'}).exec().then(result => console.log(result), err => console.log(err));

และ

Category.find().exec(function(err, result) {
    if (err)
        return next(err);
    console.log(result);
})

person qwang07    schedule 30.03.2017    source แหล่งที่มา
comment
คุณสอบถามมันยังไง? กรุณาเพิ่มฟังก์ชั่น   -  person Sravan    schedule 30.03.2017
comment
Category.findOne({store: 'Store-Name-Here'}).then(store =› {/*something here*/}, err =› {/*err here*/});   -  person qwang07    schedule 30.03.2017
comment
ลองอีกครั้ง Category.findOne({store: "Store"}).then(store => {/*something here*/}, err => {/*err here*/}); และตรวจสอบว่าเกิดอะไรขึ้น   -  person Sravan    schedule 30.03.2017
comment
มันคืนค่าเป็นโมฆะ   -  person qwang07    schedule 30.03.2017
comment
ข้อผิดพลาดหายไปแล้วเหรอ? ในขณะที่คุณให้สิ่งนั้น?   -  person Sravan    schedule 30.03.2017
comment
ใช่แล้ว ไม่ผิดเมื่อพยายามค้นหาบางสิ่งที่ไม่มีอยู่จริง   -  person qwang07    schedule 30.03.2017
comment
ปัญหาอาจเป็น 'Store-Name-Here' หรือแม้แต่การจัดการการเรียกกลับที่สำเร็จของ api   -  person Sravan    schedule 30.03.2017
comment
ขั้นแรกให้ลองใช้เครื่องหมายคำพูดคู่หรือชื่อที่ไม่มี -(เส้นประ)   -  person Sravan    schedule 30.03.2017
comment
ใช่ แต่ฉันได้สิ่งที่คล้ายกันมากซึ่งค้นหาด้วยสตริงเดียวกันและการโทรกลับสำเร็จของ api และใช้งานได้ดี   -  person qwang07    schedule 30.03.2017
comment
ดังนั้นการจัดการอาจจะมีปัญหา error ชี้ไปที่หมายเลขบรรทัดใด?   -  person Sravan    schedule 30.03.2017
comment
ข้อผิดพลาดจะเกิดขึ้นเฉพาะเมื่อฉันลองวิธีที่ถูกต้องเช่น: Category.find() หรือ Category.findOne() ไม่ว่าฉันจะพยายามค้นหาทั้งหมดหรือเฉพาะเจาะจงเมื่อใด   -  person qwang07    schedule 30.03.2017
comment
ไม่มีหมายเลขบรรทัดแสดงในข้อความแสดงข้อผิดพลาด ฉันได้วางทั้งหมดไว้ที่นี่แล้ว   -  person qwang07    schedule 30.03.2017
comment
ฉันคิดว่าเอาต์พุตมาเป็นอาร์เรย์ แต่คุณกำลังจัดการมันเป็นสตริง วางการจัดการโค้ด   -  person Sravan    schedule 30.03.2017
comment
Category.findOne({store: 'ชื่อร้านค้า-ที่นี่'}).exec().then(result =› { console.log(result); return res.status(200).json({'message': result }); }, ผิดพลาด =› ถัดไป (ผิดพลาด));   -  person qwang07    schedule 30.03.2017
comment
Category.findOne({store: 'Store-Name-Here'}).exec().then(result => { console.log(result);}, err => next(err)); เพียง console.log(result) และตรวจสอบว่ายังมีข้อผิดพลาดอยู่หรือไม่   -  person Sravan    schedule 30.03.2017
comment
ใช่ ยังอยู่ที่นี่   -  person qwang07    schedule 30.03.2017
comment
reposne กำลังจะมาถึง success หรือ error?   -  person Sravan    schedule 30.03.2017
comment
@qwang คือ 'Store-Name-Here' ตัวอักษร ค่าที่คุณกำลังสืบค้นหรือคุณกำลังส่งตัวแปรบางประเภทที่มีสตริงนั้นหรือไม่ ดูเหมือนว่าคุณกำลังส่งเอกสาร Mongoose แทนที่จะเป็นสตริง นอกจากนี้ คุณมี hooks/มิดเดิลแวร์สำหรับรุ่น Category หรือไม่   -  person robertklep    schedule 30.03.2017
comment
@Sravan คำขอจะดำเนินต่อไปจนกว่าจะหมดเวลา   -  person qwang07    schedule 30.03.2017
comment
@robertklep 'Store-Name-Here' เป็นค่าที่ฉันใช้อย่างแน่นอน เพราะมันเป็นเพียงการทดสอบ และไม่มีมิดเดิลแวร์อื่นสำหรับโมเดลนี้   -  person qwang07    schedule 30.03.2017
comment
URL คำขอคือ api.localhost:3000/store/Store-Name-Here/categories/ รับโดย router.get('/store/:storename/categories', Category.list)   -  person qwang07    schedule 30.03.2017
comment
@qwang เป็นไปได้ไหมว่าเอกสารในฐานข้อมูลเสียหาย? คุณสมบัติ store ของเอกสารนั้นเป็นวัตถุแทนที่จะเป็นสตริงใช่หรือไม่   -  person robertklep    schedule 30.03.2017
comment
ฉันไม่คิดอย่างนั้น เพราะคุณสามารถเห็นได้ว่าเอกสารถูกส่งออกจากฐานข้อมูลแล้ว มันเป็นสตริงอย่างแน่นอน   -  person qwang07    schedule 31.03.2017
comment
ปัญหาอาจอยู่ที่การจัดการสัญญา แทนที่ exec() ลองใช้ฟังก์ชันโทรกลับสองฟังก์ชันสำหรับ success และ error ชอบ function(){}   -  person Sravan    schedule 31.03.2017
comment
@Sravan การจัดการข้อยกเว้นไม่สามารถแก้ไข สาเหตุ ของปัญหาได้   -  person robertklep    schedule 31.03.2017
comment
@qwang คุณสามารถเพิ่มผลลัพธ์ต่อไปนี้ (เรียกใช้จากเชลล์ MongoDB) ไปยังคำถามของคุณ: db.categories.find({ store: 'Store-Name-Here' }) (หรือแม้กระทั่งหากมีเอกสารเพียงไม่กี่ฉบับในฐานข้อมูล db.categories.find())   -  person robertklep    schedule 31.03.2017
comment
@robertklep ฉันไม่ได้พยายามจัดการกับข้อยกเว้น ฉันกำลังพยายามค้นหาว่าข้อยกเว้นมาจากไหน   -  person Sravan    schedule 31.03.2017
comment
@Sravan Mongoose กำลังพยายามส่งวัตถุ (หรือเอกสาร Mongoose ไม่แน่ใจ) เป็นสตริงและล้มเหลว เป็นผลมาจากการแสดงข้อความค้นหา ซึ่งทำให้ฉันเชื่อว่าอาจมีเอกสารที่ไม่ถูกต้องในฐานข้อมูล (เนื่องจากโดยพื้นฐานแล้วเราได้ตัดความเป็นไปได้อื่นๆ ทั้งหมดออก)   -  person robertklep    schedule 31.03.2017
comment
ฉันคิดว่าฉันพบปัญหาแล้ว ฉันพยายามเพิ่มวิธีการคงที่ให้กับโครงร่างหมวดหมู่ชื่อ CategoryScheme.static.init() หลังจากที่ฉันลบวิธีการนั้นออก ทุกอย่างก็ใช้ได้ดี ฉันคิดว่าอาจมีวิธีการชื่อ init() อยู่แล้วด้วยเหตุผลบางประการ และฉันสร้างขึ้นมาวิธีหนึ่งที่สามารถแทนที่มันได้ นั่นทำให้เกิดข้อผิดพลาด   -  person qwang07    schedule 04.04.2017


คำตอบ (1)


ฉันคิดว่าฉันพบปัญหาแล้ว ฉันพยายามเพิ่มวิธีการคงที่ให้กับโครงร่างหมวดหมู่ชื่อ CategoryScheme.static.init() หลังจากที่ฉันลบวิธีการนั้นออก ทุกอย่างก็ใช้ได้ดี ฉันคิดว่าอาจมีวิธีการชื่อ init() อยู่แล้วด้วยเหตุผลบางอย่าง และฉันได้สร้างวิธีที่อาจแทนที่มันได้ นั่นคือสิ่งที่ทำให้เกิดข้อผิดพลาด

person qwang07    schedule 04.04.2017