目的:
1)创建一个在NodeJs网络服务器上运行的网站。
(expressjs,stylus,jade)+ NodeJS
2)在NodeJs网络服务器上创建一个restful webservice
(expressjs)+ NodeJS
3)该网站调用一个宁静的Web服务条目
(javascript文件)
使用ubuntu终端,我为网站启动了另一个nodeJs webservice.Testing restful webservice(在浏览器中):
地址:本地主机:1337 /葡萄酒/
数据结果是: [ { “名字”:“新酒”, “年”:“2012”, “_id”:“50e8255197f0b5260f000001” } ]
测试网站 网址:localhost:3000 /
这是我在网站上使用的javascript文件,这里我要打电话给 rest url localhost:1337 / wines / zh得到结果数据。
alert('hello!'); (popup)
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost:1337/wines/');
xhr.onreadystatechange = function () {
if (this.status == 200 && this.readyState == 4) {
console.log('response: ' + this.responseText);
alert("Yes");
}
};
xhr.send();
在终端中,我看到执行了GET:
宁静的终端:
GET /葡萄酒/ 200 3ms - 93
网站终端:
GET / 200 11ms
GET /JavaScript/script.js 304 1ms
GET /stylesheets/style.css 304 1ms
当我调试时,我这样做:
var xhr = new XMLHttpRequest(); OK
xhr.open('GET','http:// localhost:1337 / wines /'); OK
xhr.send();行
xhr.onreadystatechange = function()跳转到回叫确定
但'readystate = 4但this.status = 0'并且我没有给出结果
最后我得到了这个错误:
组件返回失败代码:0x80004005(NS_ERROR_FAILURE)
来自firebug的结果信息(用于调试此java脚本)
Content-Type application / json;字符集= UTF-8
Date Sun,06 Jan 2013 04:15:07 GMT
X-Powered-By Express
请求标题
接受text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8
接受编码gzip,deflate
Accept-Language en-us,en; q = 0.5
连接保持活着
主持人localhost:1337
来源// localhost:3000
Referer // localhost:3000 /
User-Agent Mozilla / 5.0(X11; Ubuntu; Linux x86_64; rv:13.0)Gecko / 20100101
Firefox / 13.0.1
我搜索了堆栈溢出,它可能是一个“跨域问题”,因此我应该 在我的restful webservice中添加一些javascript:
var express = require('express'),
wine = require('./routes/wines');
var app = express();
app.configure(function () {
app.use(express.logger('dev')); /* 'default', 'short', 'tiny', 'dev' */
app.use(express.bodyParser());
//Added part
app.all('/', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "*");
res.header("Access-Control-Allow-Methods", "XPOST, GET, OPTIONS");
res.header("Access-Control-Max-Age", "1000");
next();
});
//Added part
});
app.get('/wines', wine.findAll);
app.get('/wines/:id', wine.findById);
app.post('/wines', wine.addWine);
app.put('/wines/:id', wine.updateWine);
app.delete('/wines/:id', wine.deleteWine);
app.listen(1337);
console.log('Listening on port 1337...');
仍然没有结果,任何人都知道如何解决这个问题?很多人
答案 0 :(得分:0)
您必须在调用open()
之前注册事件处理程序。
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (this.status == 200 && this.readyState == 4) {
console.log('response: ' + this.responseText);
alert("Yes");
}
};
xhr.open('GET', 'http://localhost:1337/wines/');
xhr.send();