【发布时间】:2019-02-20 06:44:50
【问题描述】:
对于我的 React/Express 应用程序,我已经在 Express 中构建了我的后端 API,包括用于发布博客文章 (/api/posts) 的路由。在前端,我使用 POST 方法构建了一个表单,该方法提交到此路由,但是当我提交表单时,我收到错误“无法 POST /api/posts”。
app.js (Express)
const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const session = require('express-session');
const app = express();
//Load routes
const photos = require('./routes/photos');
const posts = require('./routes/posts');
const recs = require('./routes/recs');
// DB config
const db = require('./config/database');
//Connect to mongoose
mongoose.connect(db.mongoURI, {useNewUrlParser: true})
.then(() => console.log('MongoDB connected...'))
.catch(err => console.log(err));
// Body parser Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));
// Static folder
app.use(express.static(path.join(__dirname, 'public')));
// Express Session Middleware
app.use(session({
secret: 'secret',
resave: true,
saveUninitialized: true,
//cookie: {secure: true}
}));
//Router
app.use('/api/photos', photos);
app.use('/api/posts', posts);
app.use('/api/posts', recs);
const port = process.env.PORT || 5000;
app.listen(port, () => {
console.log(`Server started on port ${port}`);
});
发布路线
const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
// Load Posts model
require('../models/Post');
const Post = mongoose.model('posts')
// Get all posts
router.get('/', (req, res) => {
Post.find()
.sort({date:'desc'})
.then(posts => {
res.json(posts);
})
.catch(err => {
res.send(err);
})
});
router.post('/', (req, res) => {
console.log(req.body); //testing info I receive for now
})
表格
const postForm =
<div className="form-popup" id="newPost">
<form action="/api/posts" method="post" className="form-container">
<h1>New Blog Post</h1>
<label htmlFor="title"><b>Title</b></label>
<input type="text" placeholder="Blog Post Title" name="title" required />
<label htmlFor="location"><b>Location</b></label>
<input type="text" placeholder="Location" name="location" required />
<textarea placeholder="Your post here" name="content" required />
<button type="submit" className="btn">Post</button>
<button type="submit" className="btn cancel" onClick={this.handleClose}>Close</button>
</form>
</div>
【问题讨论】:
-
你可以通过邮递员访问API吗?
-
@DanPhilip 不,我在那里遇到了同样的错误。我不知道为什么,因为我在另一个我已经完成的项目上对这个 API 进行建模。我不应该同时向 /api/posts 发送 get 和 post 请求吗?
-
你能补充一下你是如何提出请求的吗?
-
@molamk 在邮递员中?我正在向 localhost:3000/api/posts 发送一个 POST 请求,正文字段为 title: test 和 location: thailand
-
这就是问题所在。您在端口 3000 上发送,但在端口 5000 上侦听
标签: node.js reactjs express post