【发布时间】:2017-09-15 21:34:16
【问题描述】:
我正在尝试使用 node (w/npm) 和 express 为网络艺术类创建一个 webapp。这个想法是让网站的主体都是一种颜色,但是任何人都可以在 Twilio 编号处向网站发送十六进制代码/CSS 颜色,并且网站的颜色将立即更改为该颜色值。
它的工作原理基本上是服务器在http://example.com/message 接收来自 Twilio 的 POST 请求,其中包含文本消息的正文。它将它写入到 ~/app/.data/color.tmp 的临时文件中,客户端通过 jQuery .get() 调用 http://example.com/color 来访问该文件,并返回
所以问题来了:我有一个在 glitch.me 上运行的应用程序版本,所以我知道这段代码可以运行,但我很难让它在我的域上运行。我安装了该应用程序并可以使用 npm 启动它,它成功地向我显示了 HTML 页面,但 Chrome 开发工具显示脚本在尝试访问 /color 时收到 403。此外,我网站的新文本不会更改 /.data/color.tmp 中的颜色值。我认为这可能是权限问题,但我检查了它们,它们看起来很好。
这是 index.html 页面上的服务器文件和脚本:
app/server.js
var express = require('express');
var bodyParser = require('body-parser');
var fs = require('fs');
var app = express();
app.use(bodyParser.urlencoded({extended: false}));
var dataPath = '.data/color.tmp';
// set a new color (saves posted color to disk)
app.post("/message", function (request, response) {
var dataStr = JSON.stringify(request.body.Body);
fs.writeFile(dataPath, dataStr);
response.end();
});
// get the saved color (reading from disk)
app.get("/color", function (request, response) {
var dataStr = fs.readFileSync(dataPath).toString();
response.send(JSON.parse(dataStr));
});
app.get("/", function (request, response) {
response.sendFile(__dirname + '/views/index.html');
});
var listener = app.listen(process.env.PORT, function () {
console.log('listening on port ' + listener.address().port);
});
app/views/index.html
<script>
// checks server for color value and sets background
function checkForColorChange() {
$.get('/color', function getColorComplete(data) {
document.body.style.backgroundColor = data;
console.log(data);
})
}
// Poll the server at 2000ms interval
setInterval(checkForColorChange, 2000);
checkForColorChange();
</script>
无论如何,如果它在 Glitch 上如此轻松地运行并且不会在我的网站上运行,我觉得我一定错过了一些非常明显的东西,但我已经被困了几天并且没有取得任何进展!任何帮助将不胜感激。如果还有什么不清楚的,请告诉我。
【问题讨论】:
-
在您的服务器上运行应用程序的用户是否有权读取/写入
data/color.tmp? -
@dan 是的,我刚刚检查过,它正在通过我的用户帐户上的一个屏幕运行,该屏幕应该具有完整的 r/w 权限。 imgur.com/a/FqFE4
-
@wombevyn 你看到下面my answer 的更新了吗?它包括一个您想要在此处实现的工作示例,并带有用于快速测试的source code on GitHub 和Deploy to Heroku 选项。我想知道你是否在演示中使用过它,是否有任何关于它的 cmets。
标签: javascript jquery html node.js express