我需要为我通过Node插入的每个Mongo doc生成一个随机的双字标识符字段。
我找到了随机词,一个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 :(得分:0)
我使用上面的vmkcom建议解决了这个问题。我可以为其他可能从中受益的人发帖,因为我很难诊断出这个问题,并弄清楚如何解决这个问题。注意:这是一个我怀疑不推荐的hacky修复程序(但它适用于此实例,因为正如vmkcom指出的那样,index.js文件非常简单),所以如果你有一个更优雅的解决方案,请请随时回复。
如上所述,节点模块不会自动访问您的浏览器。但是你可以用Browserify来制作它们,理论上这很棒。但是,当我运行Browserify时,它没有工作,当我运行它时,它只会导致更多的错误。
我所做的是从随机词github(位于here)获取index.js文件,将其重命名为random.js,并将其包含在我的public / 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')
这不是理想的,但确实有效。正如我所说的那样,它最快,最脏,所以如果你有更好的方法,请分享。
答案 1 :(得分:0)
如果你在服务器端使用它来处理 env 文件,你可以这样做:
export const randomString = (length: number) => {
if (process.env.SECRET_KEY === undefined)
process.env.SECRET_KEY = [...Array(length)]
.map(() => (~~(Math.random() * 36)).toString(36))
.join("");
return process.env.SECRET_KEY;
};
答案 2 :(得分:-1)
只需将random-words
模块index.js的代码复制到您的客户端代码中,然后将module.exports = words
重写为window._words = words
或者在客户端代码中使用某些模块系统require.js