2014-11-06 2 views
-1

У меня возникли проблемы с некоторым кодом javascript. Мне было интересно, поможет ли stackoverflow.Консолидация двух строк кода nodejs в один

У меня есть этот модуль ...

var errorObject = (function() { 
errorObject = {}; 
errorObject.location = "Unknown"; 
errorObject.schema = mongoose.model('Error', { 
     id: { type: String, index: true }, 
     device: { type: String, index: true }, 
     file: { type: String }, 
     meta: { type: String }, 
     data: { type: String }, 
     type: { type: String } 
    }); 
errorObject.callback = function (err, level, msg, meta) { 
     var data = { 
      device: "test", 
      file: errorObject.location, 
      meta: JSON.stringify(meta), 
      data: msg, 
      type: level 
     }; 
     new errorObject.schema(data).save(function(err, data){ 
     if(!err){ 
      console.log("Saved"); 
     } 
     }); 
    }; 
    return errorObject; 
})(); 

module.exports = {Logger: errorObject} 

который я пытаюсь использовать для отслеживания информации во всех моих других узлов файлов, как так ...

var Logger = new require('../lib/models').Logger; 
Logger.location = __filename; 

Мой вопрос, как я делаю эти две строки импорта выше в одну строку? Мне нужно импортировать запись во все мои .js-файлы, и я хотел бы быть максимально лаконичным.

ответ

0

Уступка в Javascript возвращает назначение вне блока он находится, так что вы можете сделать следующее:

(x = 5).toString() 
"5" 

Таким образом, вы должны быть в состоянии так же сделать

(Logger = new require('../lib/models').Logger).location = __filename; 

[править] См. Комментарий ниже, я удалил «var», потому что он привязывает переменную к скобке.

+0

Это именно то, что я искал. Вы должны вывести var из строки, чтобы заставить его работать. Как это ... (Logger = new require ('../ lib/models'). Logger) .location = __filename; – HarshMarshmallow

+0

Спасибо за продолжение, я исправил код в ответе! – lukevp

0

Вы могли бы написать это

(var Logger = new require('../lib/models').Logger).location = __filename; 
1

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

module.exports = function (location) { 
    return new Logger(location, ...); // Whatever ... 
}; 

И потом:

var logger = require('../lib/models/logger')(__filename); 

ИМХО это еще более кратким, чем синтаксис, который вы используете прямо сейчас, хотя это означает, что переписав некоторые части вашего модуля.

PS: Вообще говоря, ваш код выглядит не очень узко-иш, вместо этого вы, кажется, исходите из браузера (поскольку вы используете IIFE и т. Д.). Как общий совет, вы должны больше узнать о модулях CommonJS и о том, как работает модульная система узла. Нет необходимости использовать IIFE.

+0

Я на самом деле я довольно новый для nodejs. Спасибо за совет. Я рассмотрю правильный формат модуля. – HarshMarshmallow

1

Вы можете просто сделать правильный конструктор и передать значение в него:

function Logger(location) { 
    if (!(this instanceof Logger)) 
    return new Logger(location); 

    this.location = location || 'Unknown'; 
    this.schema = mongoose.model('Error', { 
    id: { type: String, index: true }, 
    device: { type: String, index: true }, 
    file: { type: String }, 
    meta: { type: String }, 
    data: { type: String }, 
    type: { type: String } 
    }); 
} 
Logger.prototype.callback = function(err, level, msg, meta) { 
    var data = { 
    device: 'test', 
    file: errorObject.location, 
    meta: JSON.stringify(meta), 
    data: msg, 
    type: level 
    }; 
    this.schema(data).save(function(err, data) { 
    if (!err) 
     console.log('Saved'); 
    }); 
}; 

module.exports = { Logger: Logger }; 

Затем используйте это нравится:

var Logger = require('../lib/models').Logger(__filename); 

// ... 

Logger.callback(....); 
+0

На самом деле, как это должно быть сделано. Схема была странно импортирована в обратный вызов, поэтому я просто пошел с более простым ответом ниже. Спасибо за помощь. – HarshMarshmallow

Смежные вопросы