2015-09-01 2 views
0

Мне нужно создать случайное поле с двумя словами для каждого документа Mongo, которое я вставляю через узел.Создание случайной строки в браузере

Я нашел случайные слова, модуль NPM. Это здорово, за исключением того, что я могу генерировать случайную строку на стороне сервера. Когда я пытаюсь использовать его в клиентском коде, функция randomWords() возвращается как неопределенная.

Вот мой соответствующий код сервера (я вынул обработчики ошибок для краткости):

var express = require('express'); 
var path = require('path'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
// random words 
var randomWords = require('random-words'); 
// Database 
var mongo = require('mongodb'); 
var monk = require('monk'); 
var db = monk('localhost:27017/test'); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 


// Make the db accessible to our router 
app.use(function(req,res,next){ 
    req.db = db; 
    next(); 
}); 

app.use('/', routes); 
app.use('/users', users); 

module.exports = app; 

А вот мой сервер вещи (мой глобальный JS файл, а не маршрут - хотя это не работа в любом случае:

// DOM Ready ============================================================= 
$(document).ready(function() { 

    var ident = randomWords(2); 

    // Add User button click 
    $('#button').on('click', addUser); //addUser is a function in this doc 

}); 

Любая идея, что я делаю неправильно здесь? Я экспортирую модуль, и я могу получить доступ к другим материалам из кода на стороне сервера (например, базы данных), я просто не знаю, где я его испортил.

+0

как вы включаете модуль случайных слов в код вашей клиентской стороны? – snozza

+0

Как вы это понимаете? (Вероятно, это моя проблема, извините, я новичок в Node.) –

+0

вам нужно, чтобы это было настоящее слово или это может быть просто случайная строка? – baao

ответ

-1

Просто скопируйте код random-words модуля index.js в код клиента и переписать module.exports = words в window._words = words

Или использовать некоторые модуль системы на клиентский код, как require.js

+0

Я не совсем понимаю, что вы имеете в виду. Вы имеете в виду копировать источник индекса модуля.js файл в мой файл global.js? Разве это не превзойдет цель включения модулей через npm? –

+0

вы не можете включить модуль npm в браузер. Broserify помогает в этом, но если вы не хотите иметь дело с этим - просто скопируйте. Для библиотек браузеров вам нужно использовать 'bower' или что-то в этом роде, но кажется, что' random-words' существует только в npm. npm - для node.js, не все библиотеки могут быть портированы в браузер – vmkcom

+0

Хорошо. Я использовал браузер для своего кода app.js (server) и экспортировал его как bundle.js. Я включил это в макет нефрита. Однако функция все еще возвращается как неопределенная. –

0

Я решил эту проблему с помощью vmkcom-х предложение выше. Я публикую для других, которые могут извлечь из этого выгоду, потому что мне очень трудно было диагностировать эту проблему и выяснить, как ее решить. ПРИМЕЧАНИЕ. Это хакерское исправление, которое, как я подозреваю, не рекомендуется (но оно работает в этом случае, поскольку, как указывал vmkcom, файл index.js довольно прост), поэтому, если у вас есть более элегантное решение, пожалуйста, не стесняйтесь для ответа ниже.

Узел модулей, как указано выше, автоматически не доступен вашему браузеру. Однако вы можете сделать их так с Browserify, что, теоретически, здорово. Но когда я запустил Browserify, это не сработало, и когда я его запустил, это вызвало больше ошибок.

Вместо этого я взял файл index.js из случайных слов github (расположенный here), переименовал его в random.js и включил его в мою общедоступную/javascripts папку. Затем я связался с ним в моем файле шаблона layout.jade так:

body 
    block content 
    script(src='http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js') 
    script(src='/javascripts/global.js') 
    script(src='/javascripts/random.js') 

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

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