#node.js #mongodb #api
#node.js #mongodb #API
Вопрос:
Я знаю, что об этом много сообщений, но ни у кого нет моей проблемы, мои таблицы существуют, путь в какой-то степени работает, но два запроса просто возвращают значение null, и я понятия не имею, почему. Вот просьба, которая не работает :
// *Get Chat Message* router.get("/message/:MessageId",async(req, res)=gt;{ try{ const message = await Message.findById(req.params.MessageId); res.status(200).json(message) } catch (err){ res.status(500).json(err) } }) // *Get All Chat Message* router.get("/message/findAll",async(req, res)=gt;{ try { const messages = await Message.find(); res.status(200).json(messages) } catch (err) { res.status(500).json(err); }
})
Если нужно, вот остальная часть файла, где ВСЕ запросы работают ИДЕАЛЬНО, поэтому я не знаю, почему не работают только эти два.
const router = require("express").Router(); const Post = require("../models/Post"); const User = require("../models/User"); const Chat = require("../models/Chat"); const Message = require("../models/ChatMessage"); // * Get a Chat * router.get("/:firstUserId/:secondUserId", async(req, res) =gt; { const chat = await Chat.findOne({ users: { $all: [req.params.firstUserId, req.params.secondUserId] } }); res.status(200).json(chat); }) // * Get every Chat of one user * router.get("/:userId", async(req, res) =gt; { try{ const chats = await Chat.find({ users: { $all: [req.params.userId]} }); res.status(200).json(chats); }catch(err){ res.status(500).json(err); } }) // *Create Chat* router.post("/",async(req, res)=gt;{ const chat = new Chat(req.body) try { const savedChat = await chat.save(); res.status(200).json(savedChat); }catch(err){ res.status(500).json(err) } }) // *Delete Chat* router.delete("/:firstUserId/:secondUserId",async(req, res)=gt;{ const chat = await Chat.findOne({ users: { $all: [req.params.firstUserId, req.params.secondUserId] } }); try{ chat.deleteOne(); res.status(200).json("The chat has been delete successfully.") } catch (err){ res.status(500).json(err) } }) // *Put Chat Message* router.put("/message",async(req, res)=gt;{ const newMessage = new Message(req.body) try { const savedMessage = await newMessage.save(); res.status(200).json(savedMessage) } catch (err) { res.status(500).json(err) } })
Имя схемы и параметр базы данных совпадают, поэтому я не знаю, почему это не работает. Он по-прежнему возвращает значение null, даже если я удалю два, которые не работают, он возвращает ошибку только в том случае, если я удалю весь файл.
Вот моя схема:
const mongoose = require("mongoose"); const ChatMessageSchema = new mongoose.Schema({ conversationId: { type: String, required: true }, userId: { type: String, required: true }, content: { type: String, required: true, max: 5000 }, state: { type: Number, default: 0 } }, { timestamps: true } ); module.exports = mongoose.model("chat_message", ChatMessageSchema,"chat_messages");
Комментарии:
1. если вы что-то утешите внутри этих двух маршрутизаторов. могут ли журналы консоли регистрироваться?
2. Если это произойдет, то возникнут две проблемы. 1. Ваш запрос находится в процессе, и res возвращается до запроса mongo (консоль возвращенного экземпляра базы данных mongo). 2. В вашей базе данных нет документа. (вы можете увидеть, какой идентификатор вы передали в парах в mongo db compass или другом инструменте gui или с помощью команд CLI.)
3. @AliFaiz он существует в mongo я провел свое исследование, скопировав идентификатор непосредственно из mongo, и с консоли ничего не печатается, только сообщение о том, что я вызвал api (которое я также получил с другого рабочего маршрута), поэтому я не понимаю, почему он не работает.
Ответ №1:
чтобы получить все документы, используйте
Model.find({});
и для одиночной попытки выполните следующие действия
Model.findOne({_id: lt;idgt;})
Комментарии:
1. Я все еще получаю ошибку , кстати, извините, но она была не «неопределенной», а нулевой, скажите мне, нужен ли вам постмальный результат таблиц mongodb с экраном
2. да, конечно, ты можешь поделиться.
3. готово я добавил их в конце.
Ответ №2:
Наконец-то найдена ошибка.
Проблема в том, что для экспресса /message
и /message/:MessageId
были на одном пути.
/findAll
все еще не работает, но мне это не нужно.