Search
Write a publication
Pull to refresh
0
0
Андрей Скулов @volux

User

Send message
Да, конечно, так элегантней. Правда, я озадачен тем, что процесс вообще доходит до валидации полей при пустом теле post-запроса.
Заработало. Щастье :)
Да, там есть .exe в архивах. Попробую подменить. Спасибо!
Да, точно. Вот, ведь, невнимательный я :) Сходу нашёл только x86 установщик. Ссылочку не подскажете? Ставить VS и «билдить» что-то не хочется ;)
Ээх! Засада. Статика — работает. Локальная «динамика» — работает. А многопользовательская — нет. Надо курить мануал — что-то не то на win7-64. Или переходить на linux :)
Вот дамп:
Trace: [Error: ERR unknown command 'evalsha']
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\node_modules\share\lib\server\session.js:485:19
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\node_modules\share\lib\server\useragent.js:185:23
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\node_modules\share\node_modules\livedb\lib\index.js:475:53
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\node_modules\share\node_modules\livedb\lib\index.js:696:53
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\node_modules\share\node_modules\livedb\lib\index.js:185:16
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\node_modules\share\node_modules\livedb\lib\index.js:144:16
    at Command.callback (C:\Dropbox\web\node\Derby\habr\node_modules\redis\index.js:1140:13)
    at RedisClient.return_error (C:\Dropbox\web\node\Derby\habr\node_modules\redis\index.js:531:25)
    at ReplyParser.<anonymous> (C:\Dropbox\web\node\Derby\habr\node_modules\redis\index.js:282:14)
    at ReplyParser.EventEmitter.emit (events.js:95:17)
Operation was rejected (Error: ERR unknown command 'evalsha'). Trying to rollback change locally.
[Error: ERR unknown command 'evalsha']

C:\Dropbox\web\node\Derby\habr\node_modules\derby\lib\View.server.js:41
  return json.replace(/[&']/g, function(match) {
              ^
TypeError: Cannot call method 'replace' of undefined
    at stringifyData (C:\Dropbox\web\node\Derby\habr\node_modules\derby\lib\View.server.js:41:15)
    at Object.View._renderScripts (C:\Dropbox\web\node\Derby\habr\node_modules\derby\lib\View.server.js:176:7)
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\lib\View.server.js:156:10
    at null._onTimeout (C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\lib\Model\bundle.js:14:5)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)


Для начала буду ставить VirtualBox…
Да, ещё добавочка:
libs/mongoose.js
// validation
Article.path('title').validate(function (v) {
    if ('undefined' == typeof v) { // чтобы node.js не "падала" при пустом теле запроса :)
        return false
    }
    return v.length > 5 && v.length < 70
});
Спасибо автору за статью. Прочитал и погонял код, я понял, что застрял в другом стеке технологий. :)
Предлагаю небольшую модификацию кода для его работы на компьютере разработчика и в средах AppFog и OpenShift:
libs/config.js (целиком)
var nconf = require('nconf');

var env = 'development',
    defaults = {
        'http': {
            'host': '127.0.0.1',
            'port': 3000
        },
        'mongo': {
            'hostname': 'localhost',
            'host': '127.0.0.1',
            'port': '27017',
            'username': '',
            'password': '',
            'db': 'test',
            'uri': 'mongodb://localhost:27017/'
        }
    }
;

if (process.env.VCAP_SERVICES) { // AppFog

    env = 'appfog';
    defaults.mongo = JSON.parse(process.env.VCAP_SERVICES)['mongodb-1.8'][0]['credentials'];
    defaults.mongo.uri = 'mongodb://' + defaults.mongo.username + ':' + defaults.mongo.password + '@' + defaults.mongo.hostname + ':' + defaults.mongo.port + '/';
    defaults.http.host = process.env.VCAP_APP_HOST;
    defaults.http.port = parseInt(process.env.VCAP_APP_PORT)

} else

if (process.env.OPENSHIFT_APP_NAME) { // OpenShift

    env = 'openshift';
    defaults.mongo = {
        'host': process.env.OPENSHIFT_MONGODB_DB_HOST,
        'port': process.env.OPENSHIFT_MONGODB_DB_PORT,
        'username': process.env.OPENSHIFT_MONGODB_DB_USERNAME,
        'password': process.env.OPENSHIFT_MONGODB_DB_PASSWORD,
        'db': process.env.OPENSHIFT_APP_NAME,
        'uri': process.env.OPENSHIFT_MONGODB_DB_URL
    };
    defaults.http.host = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
    defaults.http.port = parseInt(process.env.OPENSHIFT_NODEJS_PORT) || 8080
}

nconf.argv()
    .env()
    .file({ file: './' + env + '.json' })
    .defaults(defaults)
;

module.exports = nconf;


libs/mongoose.js (connection)
var uri = config.get('mongo:uri') + config.get('mongo:db');
mongoose.connect(uri);


server.js (listen)
var port = config.get('http:port'),
    ipAddr = config.get('http:host')
;
app.listen(port, ipAddr, function(){
        log.info('Node server started on %s:%d ...', ipAddr, port);
});


В конфигурационных файлах development.json, appfog.json и openshift.json соответственно устанавливаем специфичные значения, например:
{
    "mongo": {
        "db": "anotherTest"
    }
}

Ещё раз: спасибо! Долго думал, как реализовать коллаборативную работу с древовидным документом с версионностью в стеке php+orm… Серия статей, появившихся в последнее время на Хабре, решили вопрос. STATEfull парадигма node.js (+express+...) + MongoDB (+mondoose+plugins) рулят :)

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity