Adobe Brackets Live Preview无法访问Node.js服务器

使用Adobe Brackets运行Node.js服务器时遇到问题。 一旦在实时预览(URL是http://localhost:SOMERANDOMPORT/path/to/file.html ),我启动服务器。 如果我inputhttp://localhost:3000/test直接http://localhost:3000/test到另一个选项卡,它显示正确的JSON。

然后,我添加了一个事件函数给file.html中的一个元素,点击它,向我的服务器发出一个AJAX请求,并使用响应来改变它的一些内部HTML。 但是,点击实时预览中的元素失败,错误callback被调用。

我怎样才能解决这个问题? 我怀疑这与AJAX请求发送到http://localhost:SOMERANDOMPORT/test而不是http://localhost:3000/test的事实有关,但我似乎无法find解决scheme。

一切都在本地运行 以下是我的服务器:

 var express = require('express'); var mysql = require('mysql'); var app = express(); app.get('/test', function(req, res){ var connection = mysql.createConnection(...); connection.query("SELECT author FROM posts", function(err, results) { if (err) { console.log(err); console.log('Error on retrieving data.'); res.send(err); return; } console.log(results[results.length - 1]); res.send(results[results.length - 1]); // return last row }); connection.end(); }); app.listen(3000); console.log('Listening on port ' + port); 

而事件function:

 function getAuthor() { $.ajax({ type: 'GET', url: '/test',, success: function(data, status) { $('.author').text('Authored by ' + data.author); }, error: function(jqXHR, status, error) { // this always get called $('.author').text('Something went wrong.'); } }); } 

我感谢任何帮助。

最简单的解决方法是将实时预览直接指向您自己的节点服务器,让它从正确的端口号提供页面本身(而不是从位于不同端口的Brackets内置服务器提供页面)。 请参阅“使用您自己的后端”下方括号中的说明 。

缺点是HTML实时更新被禁用 – 但是你仍然会得到CSS实时更新,并且Brackets在保存HTML内容的时候会回到更简单的“实时重载”。

为了保持实时的HTML更新,您需要以某种方式解决端口号差异。 你可以硬编码一个localhost:3000基本URL进行testing,但是由于端口号不匹配 ,你会运行相同的问题 。 解决这个问题会非常麻烦(在你的Node服务器上设置CORS等等)。

保持完整的实时预览体验的另一个select是填充所有$.ajax()调用,以便它们返回硬编码的虚拟数据,而不会触及服务器。 如果你已经在进行unit testing的模拟,那么你可能会重用这个现有的基础设施。