即使在阅读了许多相关问题之后,我也不确定在 JS 前端收集 DOM 数据并将其 POST 到快速服务器 POST URL 之后呈现 URL 的最佳方法是什么。
如何在获取 POST 和 MYSQL 查询“ttupdate”完成后调用函数渲染?
// snippet render code ////////////////////////////////////////////////
function render(file, url, contentdata) {
app.get(url, async(_req, res, next) => {
try {
res.render(file, { data: await contentdata });
} catch (err) {
next(err);
}
});
}
render('time-picker', '/time-picker', timetablesthree)
在以下代码片段中,您将在何处以及如何实施它?
// snippet new TIME-PICKER table to DB
app.post("/time-picker-input", async(req, res) => {
for(i=0; i<=167; i++) {
let inputFieldId = req.body[i].fieldid;
let inputFieldValue = req.body[i].fieldvalue;
// console.log(inputFieldId);
await ttupdate(inputFieldValue, inputFieldId, 'timetablesthree');
};
res.json({ message: 'Success' });
});
有关我的设置的其他信息:
let express = require('express')
let bodyParser = require('body-parser')
let app = express()
app.set('view engine', 'ejs')
let path = require('path')
app.set('views', path.join(__dirname, 'views'))
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}))
app.use((err, req, res, next) => {
console.error(err.stack)
res.status(500).send('Sorry - something broke...')
})
app.listen(3000, (req, res) => {
console.log("App is running on port 3000")
})
let { singledbentry, refresh, refreshTwo, ttupdate } = require("./database.js")
let activetime = require('./activetime.js');
let mysql = require('mysql2')
这是一个可变范围的问题。
背景:许多端点正确呈现,并且在 FORM 操作 POST 后使用更新的数据正确呈现。
除非在服务器重新启动后,否则唯一无法正确呈现的端点是使用获取 POST。所以我误以为明显的原因是 fetch POST 的不同行为(比如不像浏览器那样请求渲染)。
然而,没有一个端点在重新加载后正确呈现。这是不可见的,因为他们总是通过快速 POST res.render 显示正确的数据。
编辑:
对于未来的读者:我把路由从函数中取出来,直接传递“timetablestree”的信息来证明这是一个变量范围的问题。
以下代码可以正常工作:
app.get('/time-picker', async(_req, res, next) => {
try {
timetablesthree = refresh('SELECT ttfield, ttfieldvalue FROM timetablesthree')
res.render('time-picker', { data: await timetablesthree });
console.log(timetablesthree);
} catch (err) {
next(err);
}
});