javascript - Express 中来自 React 子组件的 POST 请求

标签 javascript node.js reactjs express redux

我正在为我的程序使用 MERN 堆栈(带有 React-router 和 redux)。 在我的应用程序中,我有一个 <Navbar />组件以及 <SearchBar>组件。

我使用 create-react-app 来处理 react 方面的事情,我相信你们都知道,一切最终都包含在 App.js 中 在 App.js 中,Navbar像这样在 React router switch 语句之外。

 <Provider store={store}>
  <Router>
    <div>
   <NavBarContainer />
   <Switch>  
      <Route exact path="/" component={Homepage} />
      <Route exact path="/ProfilePage" component={ProfilePageContainer} />   
      <Route exact path="/SearchPage" component={SearchPageContainer} />     
      <Route exact path="/LoginPage" component={LoginContainer} />
   </Switch>
 </div>
 </Router>
 </Provider>

我的问题是SearchBarNavbar 的子组件就像这样。

class Navbar extends Component {
  render(){
    return (
    ***navbar stuff
    {this.props.loggedIn && <SearchBar />} 
    ***navbar stuff
    )
  }
}

当我尝试从 <SearchBar /> 发出 POST 请求时像这样:

addSearch = (event) => {
  if(this.props.loggedIn){
    fetch('/api/SearchPage', {
      headers : {
        "Accept" : "application/json",
        "Content-Type" : "application/json"       
      },
      method :  'POST',
      body : JSON.stringify({
        username : this.props.username,
        search : this.search.value
      }).then(function(value){
        return value.json()})
      .then(function(data){
        console.log("SearchData", data)
      }).bind(this) 
    })
  }
}

哪里addSearch()SearchBar 内调用与 onClick(this.addSearch) .

当我这样做时,POST 请求来 self 的 Navbar 下呈现的任何页面。 !

我的页面显示: Cannot POST /api/[Pagename}.js

当前在 Navbar 下呈现的任何页面带 react 开关将取代 [Pagename]

我怎样才能制作<SearchBar />在其内部创建 POST 请求? 或者,如果不可能,我如何在 <Navbar> 中包含该发布请求?组件?

我正在考虑的事情是,它与我使用主体解析器的事实有关,并且页面的当前主体恰好是加载的任何页面。但是,我似乎在 POST 请求中定义了 body: ,所以这没有多大意义。

现在,我只是将 <SearchBar> 的所有代码和逻辑放在一起<Navbar> 内的组件和搜索页面,但我怀疑有更好的方法来做到这一点(同时将 <SearchBar> 留在其自己的组件中)。 理想情况下,我想仅从 <SearchBar> 发送 POST 请求.

我知道我可能错过了一些常见的东西。

这是express文件中的端点(它只是为了测试而设置的)

```
 app.post('/api/SearchPage', function(req, res done){  
  if(err) done(err);
  done(null, res.json({"Test" : "testobj"}))
}'
```   

最佳答案

从给定的代码来看,问题似乎出在 fetch() 中。由于您仅声明 '/app/SearchPage',因此假定它是 React 应用程序的一部分(但事实并非如此,因为它应该命中您的 API 端点)。

您应该尝试插入端点的 URL。有时,它运行在与 React 应用程序不同的端口上(取决于您的设置)。端点可能类似于 http://localhost:3050/api/SearchPage,应在 fetch() 方法的 URL 参数中设置。

关于javascript - Express 中来自 React 子组件的 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51574455/

相关文章:

javascript - 如何让固定滚动的 div 与窗口的其余部分一起滚动?

javascript - 我无法使用 addEventListener Javascript/Jquery 将参数传递给函数

javascript - 是否可以在没有 npm start 的情况下运行 React 项目?

node.js - API 网关和微服务通信

node.js - 将异步/等待与 util.promisify(fs.readFile) 一起使用?

javascript - 我如何使用reactjs访问json中的对象数组中的数据

css - 在 React 应用程序中使用 Bootstrap 根据指定高度显示列的网格

javascript - 向没有 .prototype 的构造函数添加新属性

javascript - Electron 存在而不会发出 render-process-gone 事件

reactjs - 尝试集成 jest 并与 amchart 使用react,但出现错误。可能是什么问题?