使用Node.js res.send后,不能再调用Javascript对象上的方法

上下文和devise概述

我使用一个名为Tiff.js的库在网页上加载Tiff图像。 我在服务器和客户端上使用库。 在我的服务器中,我使用该库从服务器上的Tiff文件创build一个Tiff对象。 然后我使用ExpressJS将Tiff对象发送给客户端。

问题

简介 :使用res.send(object)将对象发送到客户端后,不能再使用对象上的方法。
更多信息 :从服务器(在Node.js中),当我从Tiff对象的Tiff.js库调用方法时,它工作正常。 在这里,你可以看到我已经调用了一些文件信息的方法,并将它们logging到控制台。 在这里输入图像说明 在客户端,我使用AngularJS来获取Tiff对象。 这似乎是成功的,因为我可以控制台login对象。 但是,当我在对象上调用Tiff.js库方法时,会引发错误。 在这里你可以看到我logging了Tiff对象,然后尝试loggingTiff对象的宽度。 在这里输入图像说明 :我已经检查,以确保Tiff.js文件正确加载客户端。

服务器控制器

 'use strict'; var fs = require('fs'); var path = require('path'); var Tiff = require('./tiff'); var filename = 'test.oct'; var tiff; exports.loadOCTFile = function(req, res) { Tiff.initialize({ TOTAL_MEMORY: 300000000 }); fs.readFile(path.resolve(__dirname, filename), function(err, data) { if (err) { throw err; } tiff = new Tiff({ buffer: data }); console.log('width:', tiff.width()); console.log('height:', tiff.height()); console.log('currentDirectory:', tiff.currentDirectory()); console.log('countDirectory:', tiff.countDirectory()); tiff.setDirectory(0); res.send(tiff); tiff.close(); }); }; 

Angular Controller中的相关客户端JS

 $scope.getTest = function() { $http.get('/oct_analysis_open').success( function(tiff) { console.log(tiff); console.log('width:', tiff.width()); }); }; 

如果需要,我可以发布Express路由。

问题是你收到的对象作为响应的有效载荷。 这个有效载荷然后被反序列化为一个对象,但它只是一个普通的对象。 如果你想调用它的方法,你需要再次用Tiff库包裹收到的tiff普通对象。

事实上,你在客户端和服务器上使用JS意味着你可以共享一些代码,但这并不意味着这些对象是共享的:你仍然使用客户端/服务器模型,并从一侧传递对象在被序列化/反序列化为包含数据和仅包含数据的某些内容(可能是JSON)之后传递给另一个。 函数不被序列化。

编辑:你可能想尝试发送数据到客户端,并在客户端重新创build一个Tiff对象的方式,你在服务器上,使用你收到的数据。