本质上,它的工作原理是服务器在http://example.com/message上从Twilio接收一个POST请求,该请求包含文本消息的正文。它将它写入~/app/.data/color.tmp的临时文件,客户端通过对http://example.com/color的jQuery.get()调用访问该文件,该调用返回
所以问题来了:我有一个版本的应用程序在Glitch.me上工作,所以我知道这段代码可以工作,但我很难让它在我的域上工作。我安装了应用程序,可以用npm启动它,它成功地向我显示了HTML页面,但Chrome devtools显示脚本在试图访问/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上很容易工作,而不会在我的网站上,但我已经被困了几天,没有取得任何进展!如果有任何帮助,我将不胜感激。如果有什么不清楚的也告诉我。
(有关工作示例,请参见下面的更新)
您的代码几乎没有问题:
path.join
连接路径您现在遇到的主要问题很可能是文件权限。好消息是,您不需要任何文件访问您正在做的事情,使用文件无论如何都不是最佳的。您只需要将颜色存储在一个变量中,如果您不需要它,它会在服务器重启期间持久存在--即使您需要,我也会使用一个简单的数据库。
例如:
// some initial value:
var color = '#ffffff';
app.post("/message", function (request, response) {
var color = request.body.Body;
response.end();
});
// get the saved color (reading from disk)
app.get("/color", function (request, response) {
response.send(color);
});
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);
});
这是我将使用的第一个更改--不要依赖于文件系统、权限、竞争条件等。
POSTendpoint略有不同--它使用/color
route和color=#abcdef
而不是/message
和body=...
,但是如果需要,您可以很容易地更改它--请参见下面。
服务器代码-Server.js:
// requires removed for brevity
const app = express();
const server = http.Server(app);
const io = socket(server);
let color = '#ffffff';
app.use(bodyParser.urlencoded({ extended: false }));
app.use('/', express.static(path.join(__dirname, 'html')));
io.on('connection', (s) => {
console.log('Socket.io client connected');
s.emit('color', color);
});
app.post('/color', (req, res) => {
color = req.body.color;
console.log('Changing color to', color);
io.emit('color', color);
res.send({ color });
});
server.listen(3338, () => console.log('Listening on 3338'));
HTML页面-索引.HTML:
<!doctype html>
<html lang=en>
<head>
<meta charset=utf-8>
<meta name=viewport content="width=device-width, initial-scale=1">
<title>Node Live Color</title>
<link href="/style.css" rel=stylesheet>
</head>
<body>
<h1>Node Live Color</h1>
<script src="/socket.io/socket.io.js"></script>
<script src="/script.js"></script>
</body>
</html>
body {
transition: background-color 2s ease;
background-color: #fff;
}
var s = io();
s.on('color', function (color) {
document.body.style.backgroundColor = color;
});
特别有趣的是客户端代码有多简单。
对于原始endpoint,在server.js中使用以下内容:
app.post('/message', (req, res) => {
color = req.body.Body;
console.log('Changing color to', color);
io.emit('color', color);
res.end();
});
GitHub上有完整的示例:
问题内容: 我一直在尝试使用nativescript创建一个android应用程序。我正在使用fetch模块从服务器获取响应。当我尝试从 **httpbin.org/get 获取响应时,可以。但是当我尝试获取响应时从我的本地服务器上,我收到 网络请求失败。** 错误。 发送到httpbin.org/get- 发送到localhost:8000 / api- 当我尝试通过请求模块在纯node.js中
问题内容: 当我尝试从to进行AJAX调用时,它将引发以下错误。 XMLHttpRequest无法加载 http:// localhost:8000 / project / login / uid = bimt; token = KAMWMS151UWP67Q 。Access- Control-Allow-Origin不允许使用原始http:// localhost。 问题答案: 由于端口不同,因
问题内容: 获取我的本地主机IP地址。但这给了我答案。如果我知道的话。 我需要我的“真实” IP地址(例如192.168.xx)来修改配置文件。我怎么能得到? 问题答案: 我通常使用以下代码: 我不知道它的起源,但是它可以在Linux / Windows上运行。
这可能是愚蠢的,但我使用XAMPP在本地主机上使用MySQL,而且我已经完成了我的应用程序并购买了服务器,所以我如何才能上传我的本地主机数据库到服务器?
使用eventmachine gem,我试图在本地主机上发送和接收数据。以下是我的客户端和服务器文件的代码。 服务器铷 客户铷 我在单独的控制台中执行服务器和客户端文件。以下是客户端的输出 客户端输出 服务器输出 在服务器文件中,我已经打印了收到的数据,但它显示“.................. 谢啦
我和我的合作伙伴正在进行一个项目,在这个项目中,我们必须从Java程序连接到一个