модель в не определенной ошибке в узле js

avatar
Circle
8 апреля 2018 в 05:34
1488
1
0

Я пишу пост API, используя restify и mongodb с мангустом.

'use strict'

const Trending = require('../models/trending');

const trendingController = {
    postTrending: (req, res, next)=>{

        let data = req.body || {};
        console.log(Trending);
        let Trending = new Trending(data);
        Trending.save(function(err) {

            if (err) {
                console.log(err)
                return next(new errors.InternalError(err.message))
                next()
            }

            res.send(201)
            next()

        })

    }
}

здесь ошибка в том, что Trending не определен, я не знаю почему.. другие подобные контроллеры работают нормально. В тренде модель мангуста код модели

'use strict'

const mongoose = require('mongoose');
const timestamps = require('mongoose-timestamp');
const Schema = mongoose.Schema;
const TrendingSchema = new mongoose.Schema({
    _id: Schema.Types.ObjectId,
    headline: {
      type: String,
      required: true
    },
    description: String,
    data: [
      {
          heading: String,
          list: [String]
      }
    ],
    tags: [{ type: Schema.Types.ObjectId, ref: 'Tags' }]
});

TrendingSchema.plugin(timestamps);

const Trending = mongoose.model('Trending', TrendingSchema)
module.exports = Trending;

структура папок

controllers
--- trending.js
models
---trending.js
Источник
Sajeetharan
8 апреля 2018 в 05:35
0

опубликуйте код тренда и путь

Circle
8 апреля 2018 в 05:43
0

@Sajeetharan я отредактировал сообщение

antzshrek
8 апреля 2018 в 05:50
0

как именно вы размещаете свой тренд? потому что я действительно не вижу, где вы создали маршрут для этого.

Ответы (1)

avatar
Renato Gama
8 апреля 2018 в 06:01
2

У вас возникла эта проблема из-за этой строки;

let Trending = new Trending(data);

Во избежание подобных проблем следует избегать использования одного и того же имени переменной для двух разных вещей. Особенно в этом случае, когда вы используете заглавную букву для объекта, когда вы должны использовать его только для классов.

Замените эту строку на;

let trending = new Trending(data);

Проблема возникает из-за того, что letconst) являются блочными, поэтому переменная с тем же именем, но из внешней области, будет переопределена. Затем вы получаете неопределенность для этой переменной, потому что вы ссылаетесь на нее в той же строке, в которой вы ее объявляете, поэтому на самом деле она все еще не определена.