Π ΠΌΠΎΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ (ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° Ρ Π²Ρ
ΠΎΠΆΡ Π² Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π²ΠΎ Π²Π²ΠΎΠ΄Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ (ΡΡΡΠΎΠΊΠΈ) ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Ρ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ, ΡΠ΅ΡΠ²Π΅Ρ ΡΠ·Π»Π° Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ, Π΄Π°Π²Π°Ρ ΠΌΠ½Π΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ
Π₯ΠΎΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡ Π² ΡΠΎΡΠΌΠ΅ Π²Π²ΠΎΠ΄Π°, ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
. Π ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Ρ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ·Π»Π°, ΠΎΠ½ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ.
/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongodb/lib/utils.js:132
throw err;
^
RangeError: Maximum call stack size exceeded
at model.Document.$toObject (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/document.js:2058:40)
at model.Document.toJSON (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/document.js:2401:15)
at clone (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:164:18)
at cloneObject (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:246:11)
at clone (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:172:16)
at model.Document.$toObject (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/document.js:2109:13)
at model.Document.toJSON (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/document.js:2401:15)
at clone (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:164:18)
at cloneArray (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:260:14)
at clone (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:159:12)
at cloneObject (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:246:11)
at clone (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:172:16)
at model.Document.$toObject (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/document.js:2109:13)
at model.Document.toJSON (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/document.js:2401:15)
at clone (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:164:18)
at cloneObject (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:246:11)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `node ./bin/www`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/paul/.npm/_logs/2018-03-07T12_32_54_826Z-debug.log
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΌΠΎΠ΅Π³ΠΎ ../models/messages.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var User = require('./user');
var schema = new Schema({
content: {type: String, required: true},
user: {type: Schema.Types.ObjectId, ref: 'User'}
});
schema.post('remove', function (message) {
User.findById(message.user, function (err, user) {
user.messages.pull(message);
user.save();
});
});
module.exports = mongoose.model('Message', schema);
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π°ΡΠ°Π»Π°ΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ Π²ΡΡΠ°Π²ΠΈΠ» ΠΊΠΎΠ΄ Π΄Π»Ρ jsonwebtoken Π² ΡΠ°ΠΉΠ» ./message/message.service.ts Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½Π° Π² ΠΌΠΎΠΉ post
url
addMessage(message: Message) {
const body = JSON.stringify(message);
const headers = new Headers({'Content-Type': 'application/json'});
const token = localStorage.getItem('token')
? '?token=' + localStorage.getItem('token')
: '';
return this.http.post('http://localhost:3000/message' + token, body, {headers: headers})
.map((response: Response) => {
const result = response.json();
const message = new Message(
result.obj.content,
result.obj.user.firstName,
result.obj._id,
result.obj.user._id);
this.messages.push(message);
return message;
})
.catch((error: Response) => Observable.throw(error.json()));
}
ΠΠΎΠ»Π½ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° - ΠΠΎΠ»Π½Π°Ρ ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π°
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠ²ΠΎΡ Π²Π΅ΡΡΠΈΡ node.js, mongoose ΠΈ MongoDB.
ΡΠ·Π΅Π» - v9.3.0
mongodb - Π²Π΅ΡΡΠΈΡ v3.6.3
ΠΌΠ°Π½Π³ΡΡΡ - 5.0.9
ΠΡΠΈΠ²Π΅Ρ @ rohan-paul,
ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΠΎ, ΡΡΠΎ ΠΎΠ±Π»Π΅Π³ΡΠΈΠ»ΠΈ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ. Π― ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π» Π²Π°ΡΠ΅ ΡΠ΅ΠΏΠΎ, ΠΈ Π΄Π»Ρ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ:
InspiredMacPro:rohan lineus$ git diff routes/messages.js
diff --git a/routes/messages.js b/routes/messages.js
index 21996e0..5e3360d 100644
--- a/routes/messages.js
+++ b/routes/messages.js
@@ -45,7 +45,7 @@ router.post('/', function (req, res, next) {
}
var message = new Message({
content: req.body.content,
- user: user
+ user: user._id
});
message.save(function (err, result) {
if (err) {
@@ -55,7 +55,7 @@ router.post('/', function (req, res, next) {
});
}
// Now because, I am connecting user with message, I have to save messages array in user model.
- user.messages.push(result);
+ user.messages.push(result._id);
user.save();
res.status(201).json({
message: 'Saved message',
ΠΏΠΎΡΠ»Π΅ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ * Ρ ΡΠΌΠΎΠ³ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π±Π΅Π· ΡΠ±ΠΎΠ΅Π².
Π£ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π·Π½Π°ΡΠΈΠΌΠΎΠ³ΠΎ ΠΎΠΏΡΡΠ° ΡΠ°Π±ΠΎΡΡ Ρ ts, ΠΈ Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΎΡΠΈΠ±ΠΊΡ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ npm ΠΎ Π½Π°ΡΠΈΠ²Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ts, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π» js, Π½Π΅ ΠΊΠΎΠΏΠ°ΡΡΡ Π² ts. Π½Π°Π΄Π΅ΡΡΡ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ.
ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΠ
Π°Π΄ΠΌΠΈΠ½ 0,078 ΠΠ
config 0,078 ΠΠ
ΠΌΠ΅ΡΡΠ½ΡΠΉ 0,078 ΠΠ
mongoose_test 0.203 ΠΠ
ΡΠ·Π΅Π» ΡΠ³Π»ΠΎΠ²ΠΎΠΉ 0,078 ΠΠ
ΡΠ΅ΡΡ 0,078 ΠΠ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ node-angular
ΠΏΠ΅ΡΠ΅ΡΠ΅Π» Π½Π° db node-angular
ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
system.indexes
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ
db.users.find (). Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ()
{
"_id": ObjectId ("5a9ff3800f2abba5379e8e93"),
"firstName": "Π»Π΅Π³ΠΊΠΎΠΌΡΡΠ»Π΅Π½Π½ΡΠΉ",
"lastName": "mcdoogal",
"ΠΏΠ°ΡΠΎΠ»Ρ": "$ 2a $ 10 $ J5H / BEKxik2SOt1b / vxWgOQIdNEERynejS7n6okj6JHTfhO / DySSG",
"ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΠΏΠΎΡΡΠ°": " [email protected] ",
"Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ" : [
ObjectId ("5a9ff4fe079501a615a5f6ff"),
ObjectId ("5a9ff5d654a45ba796525206")
],
Β«__vΒ»: 2
}
ΠΡΠΈΠ²Π΅Ρ @lineus -
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΈΠ²Π΅Ρ @ rohan-paul,
ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΠΎ, ΡΡΠΎ ΠΎΠ±Π»Π΅Π³ΡΠΈΠ»ΠΈ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ. Π― ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π» Π²Π°ΡΠ΅ ΡΠ΅ΠΏΠΎ, ΠΈ Π΄Π»Ρ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ:
ΠΏΠΎΡΠ»Π΅ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ * Ρ ΡΠΌΠΎΠ³ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π±Π΅Π· ΡΠ±ΠΎΠ΅Π².
Π£ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π·Π½Π°ΡΠΈΠΌΠΎΠ³ΠΎ ΠΎΠΏΡΡΠ° ΡΠ°Π±ΠΎΡΡ Ρ ts, ΠΈ Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΎΡΠΈΠ±ΠΊΡ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ npm ΠΎ Π½Π°ΡΠΈΠ²Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ts, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π» js, Π½Π΅ ΠΊΠΎΠΏΠ°ΡΡΡ Π² ts. Π½Π°Π΄Π΅ΡΡΡ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ.