我对此进行了大量测试和研究,但我根本无法弄清楚。我有一个功能,可以在本地运行时完美运行(没有错误),但是当部署为AWS lambda时会失败。
我创建了一个简单的示例来重新创建它:
URL LOCAL (本地URL):http://localhost:3000/flagTest/visible(正常运行✅)
以LAMBDA形式部署的URL :https://www.publicfaq.com/flagTest/visible(“切换”按钮不起作用❌)
文件:/ pages / flagTest / [tid] .js(在准系统NextJS安装上)
import React from 'react'
class FlagTest extends React.Component {
static async getInitialProps({ query }) {
return { visible: query.tid }
}
constructor(){
super();
this.state = {
showFlag:false,
}
}
componentWillMount(){
this.setState({ showFlag: this.props.visible === 'visible' });
}
handleToggle =()=> {
this.setState({
showFlag:!this.state.showFlag
});
}
render() {
return (
<div>
<h1>Flag: {this.state.showFlag ? '?' : ''} </h1>
<button className='list_toggle' onClick={this.handleToggle}>
{this.state.showFlag ? 'Hide Flag': 'Show Flag'}
</button>
<hr/>
Props:
<pre>
{JSON.stringify(this.props, null, 2)}
</pre>
State:
<pre>
{JSON.stringify(this.state, null, 2)}
</pre>
</div>
);
}
}
export default FlagTest
注意:我确实需要使用getInitialProps
,因为我打算在更复杂的情况下使用它(API通过id获取),此处未包括它,因为与该问题没有直接关系。
这是我的无服务器YML
service: A123-serverless
provider:
name: aws
runtime: nodejs8.10
stage: ${self:custom.secrets.NODE_ENV}
region: us-west-2
environment:
NODE_ENV: ${self:custom.secrets.NODE_ENV}
functions:
server:
handler: index.server
events:
- http: ANY /
- http: ANY /{proxy+}
plugins:
- serverless-apigw-binary
- serverless-domain-manager
custom:
secrets: ${file(secrets.json)}
apigwBinary:
types:
- '*/*'
customDomain:
domainName: ${self:custom.secrets.DOMAIN}
basePath: ''
stage: ${self:custom.secrets.NODE_ENV}
createRoute53Record: true
endpointType: 'regional'
谢谢!
答案 0 :(得分:0)
我找到了问题的答案,将其张贴在这里,希望可以帮助遇到相同问题的人:
问题是我正在使用“查询”提取“ id”,它在本地运行良好,但是在服务器端使用Express时,您需要将其作为这样的参数传递:
const rp = require('request-promise');
const url = 'https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States';
rp(url)
.then(function(html){
//success!
console.log(html);
})
.catch(function(err){
//handle error
});
然后在React组件上,您可以捕获它并以server.get("/q/:id", (req, res) => {
return app.render(req, res, "/q/_tid", { id: req.params.id });
});
的形式使用它的getInitial道具
req.params.id