如何为Mongo中的一个元素定义一个唯一索引

我想为数组的最后一个元素定义一个唯一索引? 这在mongo中甚至可能吗? 只有status[this.status.length-1].state和user_id对于specific status.state (例如活动)必须是唯一的。 注意:状态数组的最后一个元素定义了用户的当前状态。 例如:2 user_id status[this.status.length-1].state: **revoked**状态可以存在。 但是2个status[this.status.length-1].state: **active** user_id不能存在。 { "_id" : ObjectId("59a609778c6929e7122322cf"), "user_id": '9e2cZ' "status" : [ { "state" : "active", "updatedAt" : ISODate("2017-08-30T21:23:21.158Z"), "createdAt" : ISODate("2017-08-30T21:23:21.158Z") }, { "updatedAt" : ISODate("2017-08-31T22:24:02.613Z"), "createdAt" : ISODate("2017-08-31T22:24:02.613Z"), "state" : "revoked" }, { "updatedAt" : ISODate("2017-08-31T22:25:02.888Z"), "createdAt" : ISODate("2017-08-31T22:25:02.888Z"), "state" : "active" } […]

ExpressJS不使用app.use提供静态模板

我有我想通过app.use使用ExpressJS作为静态页面的forms,但我得到一个错误。 const express = require('express'); var app = express(); app.use(express.static(__dirname + 'public')); app.listen(3000); 这是我的文件夹结构 App Name -node_modules/ -public/ login.html -package-lock.json -package.json -server.js 我的错误是不能GET /login时,我去localhost:3000 /login。 我能做些什么来解决这个问题? 这似乎工作,当我使用模板渲染使用把手。 编辑 :我也运行在Windows 10,如果有帮助。 把app.use(express.static(__dirname + '**/public**')); 也没有解决这个问题。 解决scheme: 1。 const express = require('express'); const path = require('path'); var app = express(); app.use(express.static(path.join(__dirname, 'public'),{ extensions: ['html']} )); app.listen(3000); 2。 […]

TypeError:xxx不是一个构造函数

var Fishbowl = require('node-fishbowl'); var fb = new Fishbowl.Fishbowl({ host: 'XXXX', IADescription: 'Reporting Dashboard', IAID: 2286, IANAME: 'node-dashboard', password: 'X', port: '28192', username: 'X', bunyanLevel: 'debug' }); 上面的代码返回“TypeError:Fishbowl.Fishbowl不是一个构造函数”。 我已经尝试过所有我能想到的事情来解决这个问题,但我一直没有成功。 运行Node.js v8.2.1 任何帮助,将不胜感激。

通过socket_io传递socket.io空间?

我正在使用socket_write来打开websocket并将数据传递给node.js socket.io服务器。 我正在发送一些HTML,如下所示: private function openSocketConnection($address = 'localhost', $port = 5600) { $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect($socket, $address, $port); return $socket; } $socket = $this->openSocketConnection(); socket_write($socket, $html, strlen($html)); 这工作得很好,并把我的数据发送到我的node.js socket.io服务器,我这样捕捉它: socket.on('data', (msg) => {}); 但我现在想发送的数据,所以一个特定的房间,而不是一般的socket.io房间。 有没有一种方法可以指定一个房间? 也许当使用socket_create()什么的? 如果可能的话,显然我想阻止在每个socket_write上传递房间名称。

如何从Firebase数据库获取值并将其分配给Firebase云端函数中的值?

所以我使用firebase作为一个演示应用程序的后端,我喜欢这个堆栈,但我挂在一个问题上,我无法弄清楚如何从数据库中检索值(我已经有钥匙就好)。 简而言之,我正在从一个设备发送信息,其中包含正在尝试访问的其他设备的“友好名称”。 function代码如下所示: exports.connectMe = functions.https.onRequest((req, res) => { cors(req, res, () => { admin.database().ref('calls/' + req.body.id + '/').set({ target: req.body.target, caller: req.body.caller, time: req.body.time }); const target = req.body.target; console.log(`target: ${target}`); const targetCall = admin.database().ref(`tokens/${target}/token`); console.log(targetCall); // const targetValue = targetCall.val(); res.status(200).send("Thanks For The Call!"); }); }); variables,targetCall正确地指向我想要达到的数据库条目,但我无法提取我的生活价值。 位于admin.database.ref的令牌需要放在一个http请求中。 我如何获得价值? 注释掉的代码显示了我想要存储的variables,但是我知道.val()不是一个引用方法。 为了logging, admin被设置为require('firebase-admin'); 在代码之前。

IBM Mobile First – mfpdev-cli安装失败

安装npm mfpdev-cli(IBM Mobile First CLI)时遇到问题。 我正在使用节点v 6.11.2 npm v 5.4.1 我无法安装mfpdev-cli。 我收到以下错误: 错误信息: npm ERR! path /Users/divya/Desktop/MFP/mdo-windows-support/package.json npm ERR! code ENOPACKAGEJSON npm ERR! errno -2 npm ERR! syscall open npm ERR! package.json ENOENT: no such file or directory, open '/Users/divya/Desktop/MFP/mdo-windows-support/package.json' npm ERR! package.json npm can't find a package.json file in your current directory. npm ERR! […]

将AWSconfiguration传递给导入的模块

我正在尝试通过在本地运行JS单元来testingJS AWS Lambda。 为了模拟Lambda环境,我假定Lambda与AWS.config.credentials具有相同的angular色,然后简单地调用我导入的Lambda函数。 这工作如果我复制和粘贴到testing文件的Lambda函数,但如果我导入它然后似乎函数运行一个干净的AWS.config没有我的configuration。 我可以更改Lambda模块导入AWS的方式(使其成为全局或执行其他操作),以便从testing中获取configuration,但是我更愿意将文件保存为应该上传到Lambda的文件。 在AWS Lambda中,AWS凭证以某种方式预先configuration,而模块不必执行任何操作,我想模拟该function。 这怎么能在Node中完成? 编辑:您可以在AWS Lambda中运行任何示例函数。 例如,只需在适当的AWS Lambda中运行下面的代码即可。 var AWS = require("aws-sdk"); var dynamo = new AWS.DynamoDB.DocumentClient(); dynamo.query(…) 要在本地运行,必须在此代码之前加上以下内容: AWS.config.update({region: 'us-east-1'}); AWS.config.credentials = new AWS.SharedIniFileCredentials(); AWS.config.credentials = new AWS.TemporaryCredentials({ RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials', }); 问题是,在unit testing文件中运行此configuration步骤不会使configuration可用于导入的lambda函数,因此不能正确模拟环境。

Node.js在字节数组中使用不同的数据types

例如:我将有数据包含字节(0-100),字节(0-10),两个字节(-30- + 100),布尔( 0/1),字节,两个字节(0-300)。 客户端将接收字节数组(使用缓冲区),并从缓冲区使用偏移量创build的hax中获取数据。 所以我需要始终保持在我从客户端获取的API规范中的字节数。 例: Battery.protorype.onSubscribe = function(maxValuesSize, updateValueCallback) { var bytes = Array(6); bytes[0] = 50; bytes[1] = 2; bytes[2] = -20; bytes[3] = true; bytes[4] = 32; bytes[5] = 290; updateValueCallback(new Buffer(bytes)); 将返回:0x3202ec012022 这当然是不好的,因为两件事情: -20是ec? 290是22? (第一个字节发生了什么?290 dec是0x122,这是两个字节) 事件如果是正确的(如果数字包含在一个字节中),我需要保持大小来保持偏移量,这不会保持偏移量,因为这里的所有数字都是一个字节的大小。 有谁知道如何解决这个问题?

Koa2:如何编写中间件链?

所以在expression中,我们可以有一个中间件链,复制一个例子: middleware = function(req, res){ res.send('GET request to homepage'); }); app.get('/', middleware, function (req, res) { res.send('GET request to homepage'); }); 请问在koa2中写这个的等效方法是什么? 我正在考虑使用它的路线,每条路线我想有一个中间件来检查用户是否已经login。 谢谢 !

NodeJS:array.join的结果不正确

我注意到array.join与包含(\ r)字符的string数组的不正确的输出。 这是我的代码和输出: var list = [ "one\r", "two\r", "three\r", "four\r"] console.log(list); // ok, output: [ 'one\r', 'two\r', 'three\r', 'four\r' ] console.log(list.join(',')); // incorrect, outputs: ,foure 它在Chrome / Firefox的控制台中工作正常,只是不在nodejs中。 如果有问题,我在linux mint 18.3上使用节点6.11.3 我可以为此做一些解决方法,但是我更关心为什么会发生这种情况。