给出以下代码:
const https = require('https');
const fs = require('fs');
var path = require('path');
const express = require('express');
const app = express();
const router = express.Router();
const pool = require('./mysqldb.js');
const pathView = __dirname + "/views/";
const IMGPath = "/public";
var bodyParser = require("body-parser");
const listenPort = 8010;
var id = null ;
router.get('/details/:id', async function (req, res, next) {
id = req.params.id;
if ( typeof req.params.id === "number"){id = parseInt(id);}
res.render('details.ejs' );
});
主要目的是在提供detail.ejs文件之前将req.params.id(URL中的id)保存在id变量中。我试图删除异步但没有用,能帮我吗好吗?
答案 0 :(得分:0)
您可以在await
函数中使用async
关键字,如下所示:
router.get('/details/:id', async function (req, res, next) {
await (() => { id = req.params.id; })(); // Will run first
await (() => { res.send(id); })(); // Will run second
})
res.send(id)
或res.render('details.ejs')
(在您的情况下)将在检索到ID后运行
答案 1 :(得分:0)
对我来说似乎很好。在下面,我启动了该服务器,然后进入http://localhost:3050/123
,突然间,我一次又一次地console.logging'123',并且正确的文本显示在屏幕上。
所以... idk如果继续为您提供其他帮助,但是如果您尽最大努力将代码精简到最简单的迭代以进行调试,则可能会有所帮助。只需尝试将其复制到其他位置即可。您可能会发现其他模块之一导致了问题。
const express = require('express')
const app = express();
const port = 3050;
let id = null;
app.get('/:id', (req, res) => {
return res.send('Hello World!')
});
app.get('/details/:id', (req, res) => {
if (req.params.id){
id = req.params.id;
}
// 'id' will appear in browser
return res.send(`See details for id: ${id}`);
});
// console logs of 'id'
setInterval(() => { console.log(`id is currently ${id}`); }, 1000);
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
我认为async/await
对这个特定问题不会有任何影响。我怀疑他们有关系。
答案 2 :(得分:0)
这似乎对我有用,
router.get('/details/:id', async function (req, res, next) {
id = typeof req.params.id === 'number' ? parseInt(id) : req.params.id;
console.log(id);
res.send('details.ejs' );
});