Javascript ajax访问express中间件中的第三方服务器导致500错误
我需要从HTML5 web应用程序通过IP访问多个设备 我解决跨域的不可能在客户端完成这一切的方法是在express的中间件中“烹饪”来自客户端的请求。路由从客户端接收get或post,然后执行到由客户端有效负载标识的第三方设备的get或post 我正在使用代码从设备获取信息。当我直接从为测试目的而创建的客户端中的文件运行它时,它工作得很好。直接从文件运行避免了CORS的困难,因为我想客户机也是服务器 当我在快速路线中运行相同的代码时,我得到一个500错误 我是在尝试做一些不可能的事情吗?我只在node、express等网站上呆了大约一周,所以希望这是一个愚蠢而容易解决的问题。我认为我还没有找到任何其他类似的问题,这表明有一个合适的方法来实现我的需求Javascript ajax访问express中间件中的第三方服务器导致500错误,javascript,ajax,node.js,html,express,Javascript,Ajax,Node.js,Html,Express,我需要从HTML5 web应用程序通过IP访问多个设备 我解决跨域的不可能在客户端完成这一切的方法是在express的中间件中“烹饪”来自客户端的请求。路由从客户端接收get或post,然后执行到由客户端有效负载标识的第三方设备的get或post 我正在使用代码从设备获取信息。当我直接从为测试目的而创建的客户端中的文件运行它时,它工作得很好。直接从文件运行避免了CORS的困难,因为我想客户机也是服务器 当我在快速路线中运行相同的代码时,我得到一个500错误 我是在尝试做一些不可能的事情吗?我只在
// post to find a camera
router.post('/find', function(req, res) {
var url = 'http://' + req.body.addr + '/cgi-bin/aw_cam?cmd=QID&res=1';
console.log(url);
$.ajax({
type: 'GET',
url: url,
dataType: 'html',
success: function (result) {
console.log('success: ' + result);
res.send(result);
},
error: function (xhr, textStatus, err) {
console.log('error: ' + textStatus);
}
});
});
以下是登录到服务器控制台的内容:
http://192.168.0.10/cgi-bin/aw_cam?cmd=QID&res=1
POST /cameras/find 500 126.593 ms - 1656
提前谢谢 好的,我找到了这个方法。诀窍是使用Node的内置http消息传递功能。我找到了一篇关于如何做到这一点的好文章 下面的代码完全符合我在自定义路由中间件中的要求。我想我刚刚了解到,在客户端,我只能按照我想要的方式使用AJAX 这使我能够将设备控制协议的更复杂细节抽象到服务器中,让我的客户端应用程序使用JSON/AJAX模型与它们交互。成功
var http = require('http');
// post to find a camera
router.post('/find', function(req, res) {
var url = 'http://' + req.body.addr + '/cgi-bin/aw_cam?cmd=QID&res=1';
console.log(url);
http.get(url, (response) => {
console.log(`Got response: ${response.statusCode}`);
var body = '';
response.on ('data', function(d) {
body += d;
});
response.on ('end', function () {
console.log('received: ' + body);
var reply = {};
if (body.indexOf('OID:') == 0) {
reply.msg = body.slice(4);
reply.ok = true;
} else {
reply.msg = body;
reply.ok = false;
}
res.send(reply);
});
// consume response body
response.resume();
}).on('error', (e) => {
console.log(`Got error: ${e.message}`);
});
});