【发布时间】:2020-05-26 03:41:12
【问题描述】:
`const httpContext = require('request-context'); 常量应用程序 = 快递(); app.use(httpContext.middleware('request'));
httpContext.set('xxxxx', 'jnsdkj'); ` 它抛出一个错误'没有找到设置属性的活动上下文' 它在本地工作,但不在天蓝色工作 它以前工作过。
【问题讨论】:
`const httpContext = require('request-context'); 常量应用程序 = 快递(); app.use(httpContext.middleware('request'));
httpContext.set('xxxxx', 'jnsdkj'); ` 它抛出一个错误'没有找到设置属性的活动上下文' 它在本地工作,但不在天蓝色工作 它以前工作过。
【问题讨论】:
我检查了包 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 解决此问题。
【讨论】:
在本地,我在 azure 中使用节点版本 8.7.0。如果我们在 package.json 文件中未提及指定版本,则它允许最高节点版本 10.0 azure 使用最新版本。
为避免这种混淆,请在 package.json 中提及您正在开发的版本:
"engines": {
"node": "8.7.0" // mentioning >= causes to use latest version
},
【讨论】: