Node.js使用SQLlite的Restfull API不能与Angular 2 HTTP post配合使用
问题描述:
HTTP POST没有得到任何响应。我在开发人员工具中看不到任何回复。代码中有什么错误。请帮忙。如何从API获取响应并将新记录添加到列表中。Node.js使用SQLlite的Restfull API不能与Angular 2 HTTP post配合使用
强大的文本 //我的REST API代码: //把这些语句定义的任何路由之前。
var express = require('express');
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('app_data/SocBillSys.db');
var bodyParser = require('body-parser');
var app=express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(allowCrossDomain);
//这允许任何域访问API服务器。
function allowCrossDomain(req, res, next){
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS,
PUT, PATCH, DELETE'); // If needed
res.setHeader('Access-Control-Allow-Headers', 'X-Requested- With,contenttype'); // If needed
res.setHeader('Access-Control-Allow-Credentials', true); // If needed
next();
}
//插入记录
app.post('/db/society', function(req,res)
{
db.run("INSERT INTO society (name, type, address, city, state, pincode) VALUES (?,?,?,?,?,?)",
[ req.body.name,
req.body.type,
req.body.address,
req.body.city,
req.body.state,
req.body.pincode ]
,
function(error,response)
{
if (error == null)
res.status(202).json({"id": this.lastID});
else
res.status(500).send(error.message);
});
});
app.listen(3000, function() {
console.log('NODE.JS WEB API SERVER is listening at port 3000...');
});
ANGULAR服务HTTP调用
import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { ISociety } from '../Society/Society';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
@Injectable()
export class SocietyService {
constructor(private _http: Http){}
createSociety(society: ISociety): void{
let headers = new Headers({'Content-Type': 'application/json' });
let options = new RequestOptions({headers: headers});
this._http.post('http://localhost:3000/db/society', JSON.stringify(society), options)
.map(this.handleResponse)
.catch(this.handleError);
}
private handleResponse(res: Response) {
let body = res.json();
return body;
}
private handleError (error: Response | any) {
console.error(error.message || error);
return Observable.throw(error.message || error);
}
}
答
function allowCrossDomain(req, res, next){
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS,
PUT, PATCH, DELETE'); // If needed
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type'); // If needed
res.setHeader('Access-Control-Allow-Credentials', true); // If needed
next();
}
我没有看到你的代码等我的代码有什么区别比'X-Requested-With,Content-Type'但这不是问题。这只是我的副本问题。 –
感谢Ayush提供您的解决方案。我第一次不明白你纠正了什么,但后来我知道了。我感谢您的帮助 –