问题
我有这个假API:
[{"task_id":"44","task_title":"task1"},{"task_id":"45","task_title":"task2"},{"task_id":"46","task_title":"task1"},{"task_id":"47","task_title":"task2"}]
当我尝试使用fetch GET方法访问它时,使用以下代码:
function getData(){
fetch('http://localhost:5000/api/tasks')
.then(res => res.json())
.then((data) => {console.log(data)});}
getData();
我在控制台得到预期的结果。
(4) [{…}, {…}, {…}, {…}]
0: {task_id: '44', task_title: 'task1'}
1: {task_id: '45', task_title: 'task2'}
2: {task_id: '46', task_title: 'task1'}
3: {task_id: '47', task_title: 'task2'}
然而,当我尝试通过POST方法访问它时,像这样:
function postData(){
fetch('http://localhost:5000/api/tasks',{
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
task_title: 'testTask'
})
})
.then(res =>{
return res.json()
})
.then(data => console.log(data))
.catch(error => console.log('ERROR'))
}
我得到这个意外的404:
POST http://localhost:5000/api/tasks 404 (Not Found)
我的API是用Node.js和express设置的:
app.get('/api/tasks', (req, res)=>{
db.SelectAll().then(data => {res.json(data)});
})
db is just
const db = require('./db/db.js');
and SelectAll() is:
async function SelectAll() {
try {
const res = await client.query("SELECT * FROM tasks");
return res.rows;
} catch(err){
console.log(err);
}
client.end();
};
是什么导致这个404?
app.get('/api/tasks', (req, res)=>{ db.SelectAll().then(data => {res.json(data)}); })
你的代码注册了一个GET处理程序。您没有使用app.post
来注册POST处理程序。
而this应该表示对该路径的POST请求得到405 Method Not Allowed
响应,Express不自动支持此操作,而是给出404 Not Found
。
如果您想在向该路径发出POST请求时做一些事情,那么您需要使用app.post
来注册一个函数,该函数将运行并执行您想要执行的任何操作。