我正在尝试学习express和front javascript。我正在尝试通过提取API通过发布请求传递json数据,并希望通过express接收后端数据。 我的后端代码如下:
const express = require('express');
const app = express();
const path = require('path');
app.get('/log', function(req, res){
console.log("Hi");
});
app.get('/', (req, res) => res.sendFile(path.join(__dirname, 'index.html')));
app.listen(3000, () => console.log('Example app listening on port 3000!'));
我的index.html文件如下所示:
<!DOCTYPE html>
<html>
<head>
<title>Fetch And Express Test</title>
</head>
<body>
<input id="a">
<input id="b">
<button> Click</button>
<script>
document.getElementsByTagName("button")[0].addEventListener("click",function(){
console.log("Here");
let aInput = document.getElementById("a").value;
let bInput = document.getElementById("b").value;
let json = {"a": aInput, "b": bInput};
var data = new FormData();
data.append( "json", JSON.stringify(json));
fetch('http://localhost:3000/log', {
method: "POST", // *GET, POST, PUT, DELETE, etc.
mode: "cors", // no-cors, cors, *same-origin
cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
credentials: "same-origin", // include, same-origin, *omit
headers: {
"Content-Type": "application/json; charset=utf-8",
// "Content-Type": "application/x-www-form-urlencoded",
},
redirect: "follow", // manual, *follow, error
referrer: "no-referrer", // no-referrer, *client
body: data, // body data type must match "Content-Type" header
})
.then(function(res){});
});
</script>
</body>
</html>
这里的问题是,它不会记录“ Hi”,而如果我删除fetch函数的第二个参数并仅发送get请求,则一切正常。有什么问题吗?
答案 0 :(得分:3)
您的路由器仅设置为登录GET
,因此不会登录POST
app.get('/log', function(req, res){
console.log("Hi");
});
app.post('/log', function(req, res){
console.log("Hi");
});
或者,您可以使用app.all
处理所有请求。
有一个特殊的路由方法app.all(),用于在所有HTTP请求方法的路径上加载中间件功能。例如,无论使用GET,POST,PUT,DELETE还是http模块支持的任何其他HTTP请求方法,都会对以下对路由“ / secret”的请求执行以下处理程序。
app.all('/log', function (req, res, next) {
console.log("Hi");
})