所以,我可能在这里遗漏了一些简单的东西,但我似乎无法找到一种方法来获取我要发送响应的请求对象的主机名.
是否有可能从node.js中找出用户当前访问的主机名?
我有一条看起来像这样的路线:
app.all('/path/:namedParam/*splat?',function(req,res,next){
if(!req.params.length){
// do something when there is no splat
} else {
// do something with splat
}
});
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用 - 如果我打电话给path/foo/bar它击中路线,但如果我打电话path/foo,它不会.
是否可以使用可选的splat参数,或者我是否必须使用正则表达式来检测它?
编辑:
为了更清楚,这是我想要实现的要求:
我有一种情况,我正在尝试使用grunt来提取代码库,排除特定文件夹.
grunt在引擎盖下使用minimatch(类似于bsdglob)来匹配文件,但我似乎无法弄清楚如何进行文件夹的.gitignore样式排除.
我想要摄取这个:
ignoreme
并匹配这些:
/folder/path/here/to/something/ok.js
/another/folder/path.js
/test.js
Run Code Online (Sandbox Code Playgroud)
但不符合这些:
/folder/ignoreme/something.js
/folder/path/here/to/ignoreme/metoo/file.js
Run Code Online (Sandbox Code Playgroud)
这将匹配所有内容,包括ignoreme:
/**/*.js
Run Code Online (Sandbox Code Playgroud)
所以我想我可以这样做:
/**/!(ignoreme)/**/*.js
Run Code Online (Sandbox Code Playgroud)
但是匹配ignoreme文件夹中的文件.
我习惯了正则表达式,但似乎无法弄清楚如何重复模式或其他东西 - 我也试过像:
/(!(ignoreme)|*)*/*.js
Run Code Online (Sandbox Code Playgroud)
希望容器会重复,但这不起作用,它只是无法匹配所有东西.
有没有办法将正则表达式传递给grunt文件路径,或者让这个为我工作?
以下是我目前正在处理此问题的方法:
var pattern = /\/ignoreme\//
var files = grunt.file.expandFiles(arrayOfFilesPassedToMinimatch).filter(function(f){
return !pattern.test(f)
})
Run Code Online (Sandbox Code Playgroud)
如果在minimatch中可以删除文件夹,我仍然会感兴趣.
所以,我确定我在这里缺少一些简单的东西,但是当我将mongo作为守护进程运行时(使用mongod --fork或只是mongod),我看到的数据库内容与我在主机上运行"mongo"时的内容不同.
我唯一的假设是,当数据只运行shell时,数据存储在除/ data/db之外的某个地方,并在启动mongod时切换到/ data/db.在这种情况下,如何在运行mongod时获取我的数据?
我正在使用require.js和r.js打包我的AMD模块.我通过以下语法使用jquery和requirejs:
<script data-main="/js/client" src="/js/external/require-jquery.js"></script>
Run Code Online (Sandbox Code Playgroud)
这一切都适用于前后包装,但我遇到了很多问题,其中chrome和mobile safari持有client.js的缓存版本.我想为client.js添加一个缓存器,但我似乎无法弄清楚如何使用上面的语法来实现它.
我尝试了一些变化:
<script data-main="js/client.js?b=busted" src="/js/external/require-jquery.js"></script>
Run Code Online (Sandbox Code Playgroud)
但现在需要尝试从而获取client.js /,而不是/js404s.
我也尝试过添加
urlArgs : "bust="+new Date().getTime()
Run Code Online (Sandbox Code Playgroud)
到require.config,但似乎没有效果.
我也尝试添加相同的值app.build.js,但当它在那里时,r.js不再连接我的js文件,只是uglifies它们.
破坏require.js数据主脚本缓存的正确语法是什么?
所以,我一直在考虑一个脑筋急转弯 - 如果我有一个大对象,我出于某种原因不得不在节点js中迭代,并且在我这样做的时候不想阻止事件循环怎么办?
这是一个非常头脑的例子,我相信它可以更清洁:
var forin = function(obj,callback){
var keys = Object.keys(obj),
index = 0,
interval = setInterval(function(){
if(index < keys.length){
callback(keys[index],obj[keys[index]],obj);
} else {
clearInterval(interval);
}
index ++;
},0);
}
Run Code Online (Sandbox Code Playgroud)
虽然我确定它有其他原因让它变得混乱,但这会比常规for循环执行得慢,因为setInterval 0实际上并不是每隔0 ms执行一次,但是我不知道如何用很多循环来执行循环更快的process.nextTick.
在我的测试中,我发现这个例子需要7毫秒才能运行,而不是原生的for循环(使用hasOwnProperty()检查,记录相同的信息),这需要4毫秒.
那么,使用node.js编写相同代码的最干净/最快的方法是什么?
因此,在使用HTML5中的滚动条和内容时,我开始注意到一种恼人的趋势.如果我的元素附近有文字被拖动(例如,视频的滚动条,滚动条,用户点击并拖动的任何内容),附近的文本将被选中,就好像我没有使用控件,只是拖动在页面上.
这非常烦人,我似乎找不到正确的字符串来搜索谷歌,以弄清楚是否有可能使某些元素"无法选择".
有人知道怎么做吗?
我在使用express的节点服务器中有以下内容(截断到重要部分):
var app = express.createServer();
app.all(/test/,function(req,res){
console.log(req.headers);
console.log(req.body);
res.send("");
});
function appStart(cobrands){
app.configure(function(){
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use('/min',express.static('../min'));
app.use('/js',express.static('../js'));
app.use('/css',express.static('../css'));
app.use('/img',express.static('../img'));
});
app.listen(8080);
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个简单的形式,调用localhost:8080像这样:
<form action="http://localhost:8080/test" method="post">
<input type="hidden" name="test" value="testing"/>
<input type="submit" name="submit" value="to node"/>
</form>
Run Code Online (Sandbox Code Playgroud)
但是express.bodyParser似乎没有做任何事情,并且req.body是未定义的.这是console.logs 的输出:
// req.headers
{ host: 'localhost:8080',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3',
'content-length': '27',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
origin: 'file://',
'content-type': 'application/x-www-form-urlencoded',
'accept-language': 'en-us',
'accept-encoding': 'gzip, deflate',
cookie: '',
connection: 'keep-alive' }
// req.body
undefined …Run Code Online (Sandbox Code Playgroud) 我正在使用Mousetrap创建键盘快捷键,当焦点中的任何字段时它无法正常工作.这是我获取代码的视图演示http://davidwalsh.name/keyboard-shortcuts的链接.当我用来打电话
Mousetrap.bind('ctrl+m', function () {
var button = $('[data-action="next-page"]');
if (button.length) {
button[0].click()
}
});
Run Code Online (Sandbox Code Playgroud)
像这样它不起作用,当鼠标指向文本框或下拉等时.可以为我提供解决方案.提前致谢.
所以我将一个ruby库移植到node.js,需要创建一个PKCS7签名.
这是ruby lib正在做的事情:
p12_certificate = OpenSSL::PKCS12::new(File.read('some-path.c12'), self.certificate_password)
x509_certificate = OpenSSL::X509::Certificate.new(File.read('some-other-path.pem'))
flag = OpenSSL::PKCS7::BINARY|OpenSSL::PKCS7::DETACHED
signed = OpenSSL::PKCS7::sign(p12_certificate.certificate, p12_certificate.key, File.read('some-manifest'), [x509_certificate], flag)
Run Code Online (Sandbox Code Playgroud)
我如何在节点中实现相同的功能?我假设它会是这样的:
crypto.createCredentials({
pfx : fs.readFileSync('some-cert.p12'),
passphrase : this.certificate_password,
cert : fs.readFileSync('some-path.pem','some-encoding'),
})
Run Code Online (Sandbox Code Playgroud)
问题:
signedsigned.to_der