Javascript 由于交叉问题,nodejs无法加载URL
我正在运行node.js应用程序;它工作正常,前端带有angular.jsJavascript 由于交叉问题,nodejs无法加载URL,javascript,angularjs,node.js,cors,Javascript,Angularjs,Node.js,Cors,我正在运行node.js应用程序;它工作正常,前端带有angular.js 问题是我得到了: XMLHttpRequest无法加载localhost:3000/api/data\u历史记录。跨源请求仅支持协议方案:http、数据、chrome、chrome扩展、https、chrome扩展资源。(匿名函数)@ 根据该代码: app.use(function (req, res, next) { // Website you wish to allow to connect res
问题是我得到了: XMLHttpRequest无法加载localhost:3000/api/data\u历史记录。跨源请求仅支持协议方案:http、数据、chrome、chrome扩展、https、chrome扩展资源。(匿名函数)@ 根据该代码:
app.use(function (req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', properties.clientHost);
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', true);
// Pass to next layer of middleware
next();
});
看起来您正在使用express。。。。与其手动操作,不如使用这个中间件:有时候它是一个简单的解决方案
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('data/demodb02');
var express = require('express');
var cors = require('cors');
var app = express();
var bodyParser = require('body-parser');
var fs = require('fs');
app.use(cors());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
db.serialize(function() {
//db.run("CREATE TABLE IF NOT EXISTS counts (key TEXT, value INTEGER)");
db.run("CREATE TABLE IF NOT EXISTS sensor (id INT PRIMARY KEY, sensor_type integer, data real)");
db.run("CREATE TABLE IF NOT EXISTS location (longitude real NOT NULL, latitude real NOT NULL, sensor_id integer, PRIMARY KEY (longitude, latitude), CONSTRAINT id FOREIGN KEY (sensor_id) REFERENCES sensor(id))");
db.run("CREATE TABLE IF NOT EXISTS data_live (sensor_id INTEGER, sensor_data REAL, time time, CONSTRAINT id FOREIGN KEY (sensor_id) references sensor(id) CONSTRAINT data FOREIGN KEY (sensor_data) references sensor(data))");
db.run("CREATE TABLE IF NOT EXISTS data_history (sensor_id INTEGER, sensor_data REAL, time time, date date, CONSTRAINT id FOREIGN KEY (sensor_id) references sensor(id) CONSTRAINT id CONSTRAINT data FOREIGN KEY (sensor_data) references sensor(data))");
db.run("CREATE TABLE IF NOT EXISTS client (login varchar(50), password varchar(50), user_id integer, sensor_id integer, CONSTRAINT id FOREIGN KEY (sensor_id) references sensor(id))");
// test //
//db.run("INSERT INTO counts (key, value) VALUES (?, ?)", "counter", 0);
db.run("INSERT INTO sensor (id, sensor_type, data) VALUES (?, ?, ?)", 1, 4, 8);
db.run("INSERT INTO sensor (id, sensor_type, data) VALUES (?, ?, ?)", 2, 9, 4);
db.run("INSERT INTO sensor (id, sensor_type, data) VALUES (?, ?, ?)", 3, 7, 1);
db.run("INSERT INTO sensor (id, sensor_type, data) VALUES (?, ?, ?)", 4, 1, 15);
db.run("INSERT INTO location (longitude, latitude, sensor_id) VALUES (?, ?, ?)", 50, 45, 1);
db.run("INSERT INTO data_live (sensor_id, sensor_data, time) VALUES (?, ?, ?)", 1, 8, "08:44");
db.run("INSERT INTO data_history (sensor_id, sensor_data, time, date) VALUES (?, ?, ?, ?)", 1, 8, "08:45", "12/05/2015");
db.run("INSERT INTO client (login, password, user_id, sensor_id) VALUES (?, ?, ?, ?)", "user", "user", 1, 1);
// fin test //
});
// dynamically include routes (Controller)//
fs.readdirSync('./controllers').forEach(function (file) {
if(file.substr(-3) == '.js') {
route = require('./controllers/' + file);
route.controller(app, db);
}
});
//include the rules engine files //
/*s.readdirSync('./rules').forEach(function (file) {
if(file.substr(-3) == '.js') {
route = require('./rules/' + file);
//route.controller(app, db);
}
});*/
app.listen(3000)
console.log("Submit GET or POST to http://localhost:3000/api");
看起来您正在使用express。。。。与其手动操作,不如使用这个中间件:有时候它是一个简单的解决方案
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('data/demodb02');
var express = require('express');
var cors = require('cors');
var app = express();
var bodyParser = require('body-parser');
var fs = require('fs');
app.use(cors());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
db.serialize(function() {
//db.run("CREATE TABLE IF NOT EXISTS counts (key TEXT, value INTEGER)");
db.run("CREATE TABLE IF NOT EXISTS sensor (id INT PRIMARY KEY, sensor_type integer, data real)");
db.run("CREATE TABLE IF NOT EXISTS location (longitude real NOT NULL, latitude real NOT NULL, sensor_id integer, PRIMARY KEY (longitude, latitude), CONSTRAINT id FOREIGN KEY (sensor_id) REFERENCES sensor(id))");
db.run("CREATE TABLE IF NOT EXISTS data_live (sensor_id INTEGER, sensor_data REAL, time time, CONSTRAINT id FOREIGN KEY (sensor_id) references sensor(id) CONSTRAINT data FOREIGN KEY (sensor_data) references sensor(data))");
db.run("CREATE TABLE IF NOT EXISTS data_history (sensor_id INTEGER, sensor_data REAL, time time, date date, CONSTRAINT id FOREIGN KEY (sensor_id) references sensor(id) CONSTRAINT id CONSTRAINT data FOREIGN KEY (sensor_data) references sensor(data))");
db.run("CREATE TABLE IF NOT EXISTS client (login varchar(50), password varchar(50), user_id integer, sensor_id integer, CONSTRAINT id FOREIGN KEY (sensor_id) references sensor(id))");
// test //
//db.run("INSERT INTO counts (key, value) VALUES (?, ?)", "counter", 0);
db.run("INSERT INTO sensor (id, sensor_type, data) VALUES (?, ?, ?)", 1, 4, 8);
db.run("INSERT INTO sensor (id, sensor_type, data) VALUES (?, ?, ?)", 2, 9, 4);
db.run("INSERT INTO sensor (id, sensor_type, data) VALUES (?, ?, ?)", 3, 7, 1);
db.run("INSERT INTO sensor (id, sensor_type, data) VALUES (?, ?, ?)", 4, 1, 15);
db.run("INSERT INTO location (longitude, latitude, sensor_id) VALUES (?, ?, ?)", 50, 45, 1);
db.run("INSERT INTO data_live (sensor_id, sensor_data, time) VALUES (?, ?, ?)", 1, 8, "08:44");
db.run("INSERT INTO data_history (sensor_id, sensor_data, time, date) VALUES (?, ?, ?, ?)", 1, 8, "08:45", "12/05/2015");
db.run("INSERT INTO client (login, password, user_id, sensor_id) VALUES (?, ?, ?, ?)", "user", "user", 1, 1);
// fin test //
});
// dynamically include routes (Controller)//
fs.readdirSync('./controllers').forEach(function (file) {
if(file.substr(-3) == '.js') {
route = require('./controllers/' + file);
route.controller(app, db);
}
});
//include the rules engine files //
/*s.readdirSync('./rules').forEach(function (file) {
if(file.substr(-3) == '.js') {
route = require('./rules/' + file);
//route.controller(app, db);
}
});*/
app.listen(3000)
console.log("Submit GET or POST to http://localhost:3000/api");
如果不设置CORS头,这是预期的结果。在我看来,您正在尝试从运行angular应用程序的主机以外的其他主机访问API。同一主机不同端口我在节点中为我的app.js添加了上述代码仍然存在相同的问题。能否显示您的客户端代码。此外,如果可能的话,将服务器端和客户端代码都分解成一个?不同的端口也可以-您必须在CORS头中定义允许的端口。也就是说,如果要将其投入生产,应该使用反向代理将其托管在受信任的端口(80443)上。如果不设置CORS头,这是一个预期结果。在我看来,您正在尝试从运行angular应用程序的主机以外的其他主机访问API。同一主机不同端口我在节点中为我的app.js添加了上述代码仍然存在相同的问题。能否显示您的客户端代码。此外,如果可能的话,将服务器端和客户端代码都分解成一个?不同的端口也可以-您必须在CORS头中定义允许的端口。也就是说,如果你要将其投入生产,你应该使用反向代理将其托管在受信任的端口(80443)上。谢谢大家,但我使用了express,实际上是的,我安装cors是徒劳的。很抱歉,我没有理解你的评论。。。问题解决了,或者在安装模块后问题仍然存在?问题仍然存在,我说我已经安装了cors模块,但没有任何更改..你能粘贴一些代码吗?我想看看你是如何使用模块和路由的这是我在一个单独的文件夹中定义的app.js控件:对于5个表,它工作得很好:谢谢伙计们,但我使用了express,实际上是的,我安装了cors,但没能解决这个问题。对不起,我没有理解你的评论。。。问题解决了,或者在安装模块后问题仍然存在?问题仍然存在,我说我已经安装了cors模块,但没有任何更改..你能粘贴一些代码吗?我想看看您是如何使用模块和路由的这是我随后在seaparate文件夹中定义的app.js控件:对于5个表,它工作正常: