Articles of json

检查属性是否未定义

我正在构build一个node + express应用程序,并且用从前端表单提交的JSON填充对象。 这工作,除非我在表单中留空字段,以便例如req.body.address.street为空/未定义。 这将导致错误: TypeError: Cannot read property 'street' of undefined var b = new Business({ name: req.body.name, phone: req.body.phone, address: { street: req.body.address.street, postalCode: req.body.address.postalCode, city: req.body.address.city }, owner: { email: req.body.owner.email, password: req.body.owner.password } }); 我的问题是我怎样才能最好的防止我的应用程序崩溃时,值为空。 我想避免手动检查我的应用程序中的每个属性对未定义。 我想知道这个常见问题的最佳做法是什么。 谢谢! 更新:谢谢你,所有的答案都非常有见地。 我决定简化我的POST数据以避免这种行为。 现在我只是发布“街道”,而不是address.street,以避免这种行为。

使用NodeJS从json数组中查找项目

我试图从一个json数组中search特定的项目,并退回项目 result = { FF: { server: 'deskes.com', result: 'succes' }, { server: 'cleantarge.com', result: 'Failed' }, { server: 'fance34.com', result: 'success' },{ server: 'deskes.com', result: 'Failed' }, } 我有以下json数据。 我想要基于服务器search项目 我使用的代码 var arrFound = result.filter(function(item) { return item.server == 'deskes.com'; }); But getting TypeError: Object #<Object> has no method 'filter' 我所得到的json会在search完数据之后 result = { […]

无法使用$ http读取json文件

使用$ http从文件中读取json: (function(){ var countryApp=angular.module("countryApp",[]); countryApp.controller("CountryCtrl",function($scope,$http){ $http.get('countries.json').success(function(data){ $scope.countries=data; }); }); return countryApp; })(); 该文件与html文件位于同一文件夹中,如下所示: [ { "name": "China", "population": 135982100 }, { "name": "India", "population": 1205625000 }, { "name": "United States of America", "population": 312247000 } ] 这是错误的: XMLHttpRequest cannot load file:///home/anr/angular_examples/countries.json. Cross origin requests are only supported for HTTP. ex10.html:1 Error: Failed to execute […]

json_encode在encryption的string上不起作用

我有一点麻烦,因为我想encryption一些表单数据,然后将它们发送到我的nodejs服务器以json格式放入数据库。 我的问题:我似乎无法发布数据,一旦它被encryption。 我可以发布jsonstring很好,但没有更多: 我的代码: $rsa->loadKey($keydata); $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); $encrypted = $rsa->encrypt("test"); $jsonArray = array( 'crypt' => $encrypted ); $jsonArrayEncoded = json_encode($jsonArray); echo $jsonArrayEncoded; $ch = curl_init('https://……….'); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonArrayEncoded); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = json_decode(curl_exec($ch), true); curl_close($ch); 我甚至没有得到回声输出。 但string似乎得到encryption,因为我可以回声(很多charset错误+一些随机的字母和数字),如果我解码在PHP匆匆我得到正确的结果以及。 我没有得到任何控制台警告或错误,无论是在铬,也不是Firefox。 任何我做错了? (很确定有) e:我使用它作为encryption库: http : //phpseclib.sourceforge.net/rsa/examples.html#encrypt,enc1 编辑2:好,作为build议在我把string转换为UTF8的评论,但现在似乎是太长,不能用我的密钥解密…坚韧o只encryption单词“testing”… 我想我必须深入挖掘… 如果有人知道:对于解密,我使用以下代码的node.js的Ursa模块: var […]

如何parsing我的JSON与外部中间件现在Express不带身体分析器?

如何parsing我的JSON与外部中间件现在Express不带身体分析器? 有一段时间,我使用Express bodyParser接收和响应到服务器的JSONpost。 每次我启动服务器时,表示说bodyParser很快就会被删除,果然,我已经更新,现在JSON请求似乎显示为空。 所以我不明白中间件是如何工作的,并且遵循一个快速教程来使用body parser。 现在,使用单独的身体分析器中间件,似乎我做错了。 以前,我的语法是: app.use(express.bodyParser()); 现在,以模块体parsing器作为中间件,就像这样: app.use(bodyParser.json()); 整个例子: var express = require('express'); var bodyParser = require('body-parser'); var app = express(); function listen() { app.use(bodyParser.json()); app.post('/login', function (req, res) { var username = req.body.username; var password = req.body.password; console.log('User ' + username + ' is attempting login…'); validate(username, password, function (err, result) […]

使用hbs和获取“path.join的参数必须是string”的错误?

我想使用hbs和express来将一些模板应用到JSON数据(最终将从一个url获取数据)。 作为一个使用快递4的新手,我发现很多以前的post和解决scheme真的很混乱,因为一些function在快递4中被折旧。我组合了一些代码片段,得到了这样的结果: var engines = require('consolidate'); var express = require('express'); var hbs = require('hbs'); app = express(); app.set('views', __dirname+ '/views'); app.set('view engine', 'hbs'); app.set("view options", { layout: true }); // ROUTES app.get('/', function (req, res){ var data = {"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"} ]} res.render('index', JSON.stringify(data)); }); app.listen(3000); 我也试过在res.render中放一个简单的string,比如 res.render('index', 'haha'); 但它仍然不起作用。 任何见解请.. […]

Node.js Express REST API – 使用GET请求访问JSON url params

我有一个REST端点是/ geo / search,并且需要一些长/纬度坐标作为请求的一部分发送(GEO多边形)。 有没有什么办法可以在GET请求中使用JSON? 我在想这个URL编码可能是一个解决scheme: var data = encodeURIComponent({"coordinates":[[-122.610168,37.598167],[-122.288818,37.598167],[-122.288818,37.845833],[-122.610168,37.845833],[-122.610168,37.598167]]}); 我将如何访问路线中的这些参数?

writestream和表示为json对象?

我可能没有深入,但我真的需要一些工作。 我认为一个写/读stream将解决我的问题,但我不太了解它的语法或工作需要什么。 我阅读stream手册,并认为我理解了一些基础知识,但是当我尝试将其应用于我的情况时,它似乎打破了。 目前我有这个作为我的信息的关键。 function readDataTop (x) { console.log("Read "+x[6]+" and Sent Cached Top Half"); jf.readFile( "loadedreports/top"+x[6], 'utf8', function (err, data) { resT = data }); }; 即时通讯使用Jsonfile插件节点,这基本上缩短了fs.write,并使其更容易写入,而不是不断地写fs.write和读取catch和try块。 无论如何,我想在这里实现一个stream,但我不确定将会发生什么,我的明确结束,如何接收对象。 我认为,因为它的streamexpression不会做任何事情的对象,直到它收到它? 或者我将不得不写一个callback,以确保什么时候我的函数被调用,stream完成之前快递发送的对象,以满足ajax请求? app.get('/:report/top', function(req, res) { readDataTop(global[req.params.report]); res.header("Content-Type", "application/json; charset=utf-8"); res.header("Cache-Control", "max-age=3600"); res.json(resT); resT = 0; }); 我希望如果我改变阅读部分stream将它分离两个问题。 由于较大的json对象的读取速度,当浏览器发出ajax调用时,有时会接收到公正的json文件。 (这可能是我需要解决的callback问题,但是stream应该使其更加一致)。 然后,第二,当我加载这个节点的应用程序,它需要运行30 +写入文件,而它从我的数据库中获取数据。 目标是断开浏览器从数据库端,所以节点作为数据库通过阅读和写作。 这是由于一个旧的SQL服务器已经被大量的请求轰炸(陈旧的数据不是一个问题)。 任何帮助这里的语法? 有一个教程,我可以看到在一个人的代码pipe道响应写入stream? […]

由于性能开销,replacenodejs中的try / catch

我目前正在使用try / catch来处理JSON.parse错误 。 但是我最近在阅读了一些最佳实践之后发现,在nodejs上使用try / catch有一些性能开销 。 性能开销是否已经被修正了,还有另一种避免JSON.parse错误而不使用try / catch的方法吗?

通过node.js套接字发送文本JSON如何处理'\ n \ r'符号

我有客户端 – 服务器应用程序,服务器端在Flash上​​的Node.js客户端,通过套接字彼此进行通信。 我写string化JSON到套接字,并在服务器上读取数据: socket.on('data', function(data) { console.log(JSON.parse(data.toString()); var json = JSON.parse(data.toString()) }); 一切正常,直到我开始发送包含'\ n \ r'的长文本消息到服务器JSON。 在那我得到错误: SyntaxError:意外的input结束 因为'\ n \ r'意味着包装的结束。 从文本中删除“\ n \ r”并不是我需要它正确显示文本的好方法。 请给我最好的方法来处理这个问题。 提前致谢。