【问题标题】:error "No active context found to set property" in azure天蓝色中的错误“找不到设置属性的活动上下文”
【发布时间】:2020-05-26 03:41:12
【问题描述】:

`const httpContext = require('request-context'); 常量应用程序 = 快递(); app.use(httpContext.middleware('request'));

httpContext.set('xxxxx', 'jnsdkj'); ` 它抛出一个错误'没有找到设置属性的活动上下文' 它在本地工作,但不在天蓝色工作 它以前工作过。

【问题讨论】:

    标签: node.js azure npm


    【解决方案1】:

    我检查了包 request-context 并创建了一个示例 azure Web 应用来检查此问题。

    app.js

    const express = require('express')
    const app = express()
    const cookieParser = require('cookie-parser')
    const httpContext = require('request-context')
    app.use(httpContext.middleware('request'))
    app.use(cookieParser())
    
    app.use(function (req, res, next) {
            var cookie = req.cookies.uname;
            console.log("usercookie:"+cookie);
            if(cookie!=undefined){
            // set the user who made this request on the context
                httpContext.set('request:user', {username:cookie,loggedTime:req.cookies.loggedTime});
            }
            next();
    });
    
    app.get('/login', (req, res) => {
        var user=req.query.name;
        if(user==undefined)
           res.send('you need to pass the username.');
        else{
            //set a cookie
            res.cookie('uname',user, { maxAge: 900000, httpOnly: true });
            res.cookie('loggedTime',new Date(), { maxAge: 900000, httpOnly: true });
            console.log('cookie created successfully');
            res.send('login successed.');
        }
     });
    
    app.get('/', (req, res) => {
        res.send('Hello World!');
        });
    
    app.get('/me',(req,res)=>{
        res.send('Hello World!'+httpContext.get('request:user.username')+",loggedTime:"+httpContext.get('request:user.loggedTime'));
    });
    
    app.listen(process.env.PORT || 3000, () => console.log('Example app listening on port 3000!'))
    

    Package.json

      "dependencies": {
        "cookie-parser": "^1.4.3",
        "express": "^4.16.3",
        "request-context": "^2.0.0"
      }
    

    测试:

    https://brucenode.azurewebsites.net/login?name=bruce
    
    https://brucenode.azurewebsites.net/me
    

    httpContext.set('xxxxx', 'jnsdkj'); ` 它抛出一个错误'没有找到设置属性的活动上下文'

    我假设您可能需要检查您的代码并验证您调用httpContext.set 的位置。对于 Azure Web 应用,您也可以Enable diagnostics logging for web apps in Azure App Service 解决此问题。

    【讨论】:

      【解决方案2】:

      在本地,我在 azure 中使用节点版本 8.7.0。如果我们在 package.json 文件中未提及指定版本,则它允许最高节点版本 10.0 azure 使用最新版本。

      为避免这种混淆,请在 package.json 中提及您正在开发的版本:

      "engines": {
          "node": "8.7.0"  // mentioning >= causes to use latest version
      },
      

      【讨论】:

        猜你喜欢
        • 2015-03-07
        • 2020-09-15
        • 2020-07-15
        • 1970-01-01
        • 2020-03-30
        • 1970-01-01
        • 2014-10-04
        • 2021-05-18
        • 2018-05-19
        相关资源
        最近更新 更多