为什么我的变量没有在 node.js 中更新?
Why are my variables not updating in node.js?
我用 node.js 构建了一个网络应用程序,通过 POST 请求接收来自 SNS 主题的消息,并将它们记录到控制台,然后在网页上显示它们,如果我将消息发布到我的主题 我在控制台中打印了消息,但我的网页上没有任何更新?
这是我的 app.js
代码
const express = require("express");
const request = require('request')
const bodyParser = require('body-parser')
const app = express();
app.use(express.static('public'));
app.set("view engine", "ejs")
app.get('/', function (req, res) {
let subject = "Your Subject Will Appear Here";
let message = "Your Message Will Appear Here";
res.render("index", {subject:subject, message:message});
})
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.post('/', (req, res) => {
let body = ''
req.on('data', (chunk) => {
body += chunk.toString()
})
req.on('end', () => {
let payload = JSON.parse(body)
if (payload.Type === 'Notification') {
console.log(payload.Message);
let subject = payload.Subject;
let message = payload.Message;
res.render("index", {subject:subject, message:message});
}
});
});
app.listen(80, process.env.IP, function(request, response){
console.log("## SERVER STARTED ##");
});
这是我的 index.js
代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title</title>
<link rel="stylesheet" type="text/css" href="/css/style.css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300' rel='stylesheet' type='text/css'>
</head>
<body>
<div class="container">
<fieldset>
<% if(subject !== null){ %>
<p>SNS Subject: <%= subject %></p>
<% } %>
<% if(message !== null){ %>
<p>SNS Message: <%= message %></p>
<% } %>
</fieldset>
</div>
</body>
</html>
因为你的变量是 local 变量在 get
和 post
回调函数中。如果您希望它们在这些回调的范围之外持续存在,您需要将它们移动到一个在回调 returns.
时不会消失的范围
例如,这使它们成为全局模块但是似乎每个POST,无论它来自谁,改变内容似乎都是奇怪的不相关的 GET(参见 ***
评论):
// *** Declared at module scope
let subject = "Your Subject Will Appear Here";
let message = "Your Message Will Appear Here";
app.get('/', function (req, res) {
// *** Not declared here
res.render("index", {subject:subject, message:message});
})
// ...
app.post('/', (req, res) => {
let body = ''
req.on('data', (chunk) => {
body += chunk.toString()
})
req.on('end', () => {
let payload = JSON.parse(body)
if (payload.Type === 'Notification') {
console.log(payload.Message);
subject = payload.Subject; // <======= *** no `let`, we're not declaring here
message = payload.Message; // <======= *** same
res.render("index", {subject:subject, message:message});
}
});
});
但同样,这可能没有意义。您可能需要某种按用户或按会话的存储机制(例如数据库或过期内存缓存等)。
我用 node.js 构建了一个网络应用程序,通过 POST 请求接收来自 SNS 主题的消息,并将它们记录到控制台,然后在网页上显示它们,如果我将消息发布到我的主题 我在控制台中打印了消息,但我的网页上没有任何更新?
这是我的 app.js
const express = require("express");
const request = require('request')
const bodyParser = require('body-parser')
const app = express();
app.use(express.static('public'));
app.set("view engine", "ejs")
app.get('/', function (req, res) {
let subject = "Your Subject Will Appear Here";
let message = "Your Message Will Appear Here";
res.render("index", {subject:subject, message:message});
})
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.post('/', (req, res) => {
let body = ''
req.on('data', (chunk) => {
body += chunk.toString()
})
req.on('end', () => {
let payload = JSON.parse(body)
if (payload.Type === 'Notification') {
console.log(payload.Message);
let subject = payload.Subject;
let message = payload.Message;
res.render("index", {subject:subject, message:message});
}
});
});
app.listen(80, process.env.IP, function(request, response){
console.log("## SERVER STARTED ##");
});
这是我的 index.js
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title</title>
<link rel="stylesheet" type="text/css" href="/css/style.css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300' rel='stylesheet' type='text/css'>
</head>
<body>
<div class="container">
<fieldset>
<% if(subject !== null){ %>
<p>SNS Subject: <%= subject %></p>
<% } %>
<% if(message !== null){ %>
<p>SNS Message: <%= message %></p>
<% } %>
</fieldset>
</div>
</body>
</html>
因为你的变量是 local 变量在 get
和 post
回调函数中。如果您希望它们在这些回调的范围之外持续存在,您需要将它们移动到一个在回调 returns.
例如,这使它们成为全局模块但是似乎每个POST,无论它来自谁,改变内容似乎都是奇怪的不相关的 GET(参见 ***
评论):
// *** Declared at module scope
let subject = "Your Subject Will Appear Here";
let message = "Your Message Will Appear Here";
app.get('/', function (req, res) {
// *** Not declared here
res.render("index", {subject:subject, message:message});
})
// ...
app.post('/', (req, res) => {
let body = ''
req.on('data', (chunk) => {
body += chunk.toString()
})
req.on('end', () => {
let payload = JSON.parse(body)
if (payload.Type === 'Notification') {
console.log(payload.Message);
subject = payload.Subject; // <======= *** no `let`, we're not declaring here
message = payload.Message; // <======= *** same
res.render("index", {subject:subject, message:message});
}
});
});
但同样,这可能没有意义。您可能需要某种按用户或按会话的存储机制(例如数据库或过期内存缓存等)。