如何在node.js沙箱中安全地运行用户提交的脚本?

在node.js中运行(可能是恶意的)用户提交的脚本有什么select,安全吗? 也就是说,在阻止代码访问敏感数据和API的环境中? vm.runInNewContext(userScript, {})是一个很有吸引力的起点,但似乎有一些已知的问题 。 沙盒模块看起来很有趣,但也使用runInNewContext() ,所以我有点怀疑它。

从fs.readFileSync()到fs.readFile()的Node.js

我试图让我的头在Node.js同步与asynchronous,尤其是阅读一个HTML文件。 在请求处理程序中,我正在使用的同步版本,其工作原理如下: var fs = require("fs"); var filename = "./index.html"; var buf = fs.readFileSync(filename, "utf8"); function start(resp) { resp.writeHead(200, {"Content-type":"text/html"}); resp.write(buf); resp.end(); } exports.start=start; 什么版本使用readFile()? 我明白,readFile是asynchronous的,所以理论上我应该等待整个文件在呈现之前被读取,所以我应该引入一个addListener? 我可能会混淆不同的东西。 编辑:我试图重构这样的代码: var fs = require("fs"); var filename = "./index.html"; function start (resp) { resp.writeHead(200, {"Content-Type":"text/html"}); fs.readFile(filename, "utf8", function (err, data) { if (err) throw err; resp.write(data); }); resp.end(); […]

Node.js格式化的控制台输出

有没有一个简单的内置的方式来输出格式化数据到Node.js的控制台? 缩进,将字段向左或向右alignment,添加前导零?

npm安装不在GitHub上安装最新版本

我有一个叫做'sails-mongo'的模块,我想使用下面的命令将它更新到最新版本: npm update sails-mongo –save 我也试过卸载,然后再次安装。 我尝试了sails-mongo@latest和sails-mongo@beta 。 问题 :GitHub上的当前版本( master )package.json( https://github.com/balderdashy/sails-mongo/blob/master/package.json )文件有: "dependencies": { "async": "~0.2.9", "lodash": "~2.4.1", "mongodb": "1.4.2", "waterline-errors": "~0.10.0" }, 并在正在更新的一个 "dependencies": { "async": "0.2.10", "underscore": "1.5.2", "underscore.string": "2.3.3", "mongodb": "~1.3.23" }, 我得到主分支的唯一方法是使用命令npm install git+https://github.com/balderdashy/sails-mongo 为什么不sails-mongo@latest安装master分支?

什么可以导致node.js打印杀死并退出?

我有一个Node.js应用程序,可以在应用程序启动时从Mysql将一些数据加载到Redis中。 直到我们修改Mysql中的数据之前,它一直在正常工作。 现在它只是以“杀死”的消息退出。 我试图查明问题,但是很难使用节点检查器进行debugging,因为在–debug中运行时不会出现问题。 我不认为我的问题是在数据本身,因为它在我的本地机器上工作,但不适用于我的生产框。 我的问题是,是什么导致了“Killed”的消息,是Node.js还是在Mysql驱动程序或其他地方?

如何使用包含具有后续属性的属性?

任何想法如何使用包含属性(当你只需要包括包含表的特定字段)与sequ​​elize? 目前我有这个(但不能按预期工作): var attributes = ['id', 'name', 'bar.version', ['bar.last_modified', 'changed']]; foo.findAll({ where : where, attributes : attributes, include : [bar] }).success(function (result) { …

在Node.js上连接“无法GET /”

我试图开始使用像这样connect一些静态网页: var connect = require("connect"); var nowjs = require("now"); var io = require("socket.io"); var app = connect.createServer( connect.static(__dirname + '/public') ); app.listen(8180); 所以我在app.js文件所在的同一目录的/public目录下添加了一个简单的index.html ,但是当我尝试在浏览器上查看页面时,我得到了来自节点的响应: 不能获取 / 我做错了什么,我该如何纠正?

如何解码一个节点应用程序中的谷歌OAuth 2.0 JWT(OpenID连接)?

我有一段时间在这里尝试使用谷歌OAuthauthentication我的节点快递应用程序中的用户。 我可以成功地完成OAuth,它将返回如下响应: { access_token: 'token string', id_token: 'id.string', expires_in: 3599, token_type: "Bearer" } 这一切都是有道理的,但我不能为我的生活弄清楚如何解码智威汤逊。 所有这些我都没有经验,所以这对我来说有点陌生。 按照此处列出的说明: https : //developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken我试图在我的节点应用程序本地解码智威汤逊。 我在我的节点环境中安装了https://github.com/hokaccha/node-jwt-simple 。 而且我很确定我需要使用这个证书( https://www.googleapis.com/oauth2/v1/certs )来解码它,但是我在这里有点遗憾。 我真的不知道如何将证书放入我的节点应用程序,之后如何与node-jwt-simple一起使用它。 而且我也不是很了解我怎么知道什么时候需要提交新的证书,而不是使用caching的证书。 有人在这里有一些经验,可以帮助我吗? 谢谢你的帮助。 在这一点上,我完全不知所措。 **更新** 所以我取得了一些进展…有点。 通过调用jwt.decode(id_token,certificate,true); 我能够成功解码令牌。 即使证书var是一个空对象{}。 这留下了三个问题。 1:使用谷歌的url将证书join我的快递应用的最佳方式是什么? 2:我怎么知道什么时候需要拉一个新的版本? 3:看起来像是通过noVerify(jwt.decode中的第3个参数)是一个可怕的想法。 我怎样才能在没有通过的情况下工作? 它看起来也许jwt-simple期待hs256和令牌使用rs256。 再一次,我在这方面超级经验不足,所以我可能会在这里的基础。 *更新*感谢来自纳特的帮助,我能够得到这个工作! 我想我已经尝试了每个JWT和JWS节点模块。 我最终得到的结果如下:我发现我看到的所有模块都不像我想要的那样。 我创build了以下用于解码id_token的jwt解码助手方法,这样我就可以从头文件中获取孩子了。 module.exports = { decodeJwt: function (token) { var segments = […]

如何在nodejs中使用sequelize进行连接查询

我正在使用序列化ORM; 一切都很好,干净,但我有一个问题,当我使用join查询。 我有两个模型:用户和post。 var User = db.seq.define('User',{ username: { type: db.Sequelize.STRING}, email: { type: db.Sequelize.STRING}, password: { type: db.Sequelize.STRING}, sex : { type: db.Sequelize.INTEGER}, day_birth: { type: db.Sequelize.INTEGER}, month_birth: { type: db.Sequelize.INTEGER}, year_birth: { type: db.Sequelize.INTEGER} }); User.sync().success(function(){ console.log("table created") }).error(function(error){ console.log(err); }) var Post = db.seq.define("Post",{ body: { type: db.Sequelize.TEXT }, user_id: { type: […]

用node.js导出类

我有一个名为bob_test.spec.js的文件正在由jasmine-node运行的以下testing代码 require('./bob'); describe("Bob", function() { var bob = new Bob(); it("stating something", function() { var result = bob.hey('Tom-ay-to, tom-aaaah-to.'); expect(result).toEqual('Whatever'); }); }); 为了使testing通过,我写了一个名为bob.js的文件,下面的生产代码 "use strict"; var Bob = function() { } Bob.prototype.hey = function (text) { return "Whatever"; } module.exports = Bob; 当我运行testing – 使用jasmine-node . – 我得到以下的F Failures: 1) Bob encountered a declaration exception […]