[英]POST, PUT, DELETE requests from AngularJS $http/AJAX to Node.js + Express.js based API
我在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
对象中req.query
任何数据。 当我用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';
});
和解决方案在这里
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请求中,所有这些都有效,但是如何使它在其他对象上起作用?
您正在使用哪个版本的Express? 您可能正在编写旧方法并使用新版本。
您可能想检查一下- 如何检索POST查询参数?
无论如何,我建议您使用ngResource在Angular中进行REST HTTP调用。
query
, save
等。 angular .module('MyModule') .factory('AddEndpoint', AddEndpoint); AddEndpoint.$inject = ['$resource']; function AddEndpoint($resource) { return $resource(API_URL + '/:param', { param: '@param' }); }
angular .module('MyModule') .controller('MyController', MyCtrl) MyCtrl.$inject = ['AddEndpoint']; function MyCtrl(AddEndpoint) { var scope = this; scope.getFromApi = AddEndpoint.get({ params: 'add1' }); // GET 'API_URL/add1' scope.postToApi = postToApi; function postToApi(data) { data.params: 'add2' AddEndpoint.save(data); // POST to 'API_URL/add2' } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.