gpt4 book ai didi

javascript - 使用 javascript 调用 express js restful webservice => 结果总是空响应

转载 作者:行者123 更新时间:2023-11-30 06:36:24 26 4
gpt4 key购买 nike

目的:
1) 创建一个在 NodeJs 网络服务器上运行的网站。(expressjs, stylus, jade) + NodeJS
2) 在 NodeJs 网络服务器上创建一个 Restful 网络服务 (expressjs) + NodeJS
3)网站调用restful web服务入口 (javascript 文件)


使用 ubuntu 终端,我为网站启动了 nodeJs,其余的启动了另一个webservice.Testing the restful webservice (in browser):

网址:localhost:1337/wines/

数据结果为:[ { "name": "新酒", “年份”:“2012”, “_id”:“50e8255197f0b5260f000001” }]

测试网站网址:localhost:3000/

这是我在网站中使用的javascript文件,在这里我想调用rest url localhost:1337/wines/en 获取结果数据。

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:
Restful 终端:
获取/wines/200 3ms - 93

网站终端:
获取/200 11 毫秒
获取/JavaScript/script.js 304 1 毫秒
GET/stylesheets/style.css 304 1ms

当我调试时,我是这样的:
var xhr = new XMLHttpRequest();好的
xhr.open('GET', 'http://localhost:1337/wines/');好的
xhr.发送();好的

xhr.onreadystatechange = function() 跳转到回调OK
但是 'readystate=4 但 this.status = 0' 并且我没有给出结果

最后我得到这个错误:
组件返回失败代码:0x80004005 (NS_ERROR_FAILURE)


firebug 的结果信息(用于调试此 java 脚本)

内容类型应用程序/json;字符集=utf-8
日期 2013 年 1 月 6 日星期日 04:15:07 GMT
X-Powered-By Express
请求 header
接受text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
接受编码 gzip、deflate
接受语言 en-us,en;q=0.5
连接保持事件
主机本地主机:1337
来源//localhost:3000
Referer//localhost:3000/
用户代理 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101
Firefox/13.0.1


我搜索了堆栈溢出,它可能是一个“跨域问题”,因此我应该将一些 javascript 添加到我的 restful web 服务中:

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...');

Still no result, anyone an idea how to fix this issue? Many thanx

最佳答案

您必须在调用 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();

关于javascript - 使用 javascript 调用 express js restful webservice => 结果总是空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14179402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com