【发布时间】:2017-12-02 02:42:56
【问题描述】:
我在 Node.js 和 Express.js v4 上编写了后端 API,这部分(index.js):
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', 'http://example.com');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});
app.post('/add1', function (req, res) {
db.one("INSERT INTO table(value1) VALUES (${value1}) RETURNING ID", req.query).then(function (data) {
res.json(data);
}).catch(function (error) {
res.json(error);
});
});
app.put('/add2', function (req, res) {
db.one("INSERT INTO table(value1) VALUES (${value1}) RETURNING ID", req.query).then(function (data) {
res.json(data);
}).catch(function (error) {
res.json(error);
});
});
app.get('/add3', function (req, res) {
db.one("INSERT INTO table(value1) VALUES (${value1}) RETURNING ID", req.query).then(function (data) {
res.json(data);
}).catch(function (error) {
res.json(error);
});
});
我有这样的 Angular JS 或示例 ajax
app.controller('globalController', function($scope, $http) {
var jsd = {};
jsd.value1=1;
$http.put(API_URL + 'add2', jsd).then(function(data) {
console.log(data);
}, function(data) {
console.log(data);
});
});
和
$.ajax({
url: API_URL + 'add1',
method: 'POST',
dataType: 'json',
data: jsond,
success: function(data) {
console.log(data);
},
error: function(data) {
console.log(data);
}
});
但是我没有收到任何数据到我的req.query 并且通常在req 对象中。当我使用 get 向 add3 发出 AJAX 请求时,一切正常,req.query 有我的参数。
我读到了这个解决方案:
app.config(function ($httpProvider) {
$httpProvider.defaults.transformRequest = function(data){
if (data === undefined) {
return data;
}
return $.param(data);
};
$httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
});
和解决方案here
var multer = require("multer");
//...
var upload = multer({ dest: "./upload/" });
app.post("/post", upload.array(), function(req, res) {
console.log(req.body);
res.send(null);
}
我先试过了,不行,第二个是太奇怪的解决方案(我无法将数据保存到文件等)我认为问题出在第一个 OPTION 请求中,但我用谷歌搜索了它,没有找到解决方案。我需要很少的示例(工作代码)如何从 Angular $http 或 AJAX 发送 POST 或 PUT 数据,并在 node.js 的 req 对象中使用这些数据。在 GET 请求中,这一切都有效,但我怎样才能让它在其他人身上有效?
【问题讨论】:
标签: angularjs node.js ajax express