如何在Node.js中提供文件之前保存变量

时间:2018-10-22 20:35:35

标签: javascript node.js html5 express progressive-web-apps

给出以下代码:

 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变量中。我试图删除异步但没有用,能帮我吗好吗?

3 个答案:

答案 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' );
});