我正在与NodeJs一起开展大学项目,但我在本地测试时遇到了一些麻烦。
这是问题所在: 我有一个GET API“/ api / services / names”,NodeJS服务器在端口8080上运行。
如果我通过将网址放在Chrome栏中(“http://localhost:8080/api/services/names”)来测试带有Postmanor的API,那么它可以正常工作,我可以得到我的回复。
问题是,如果我在本地网站上使用此功能中的fetch()
进行测试:
function fetchServicesNames(){
fetch('/api/services/names')
.then(function(response){
return response.json();
})
.then(function(data){
data.map(addServiceLink);
});
}
Javascript控制台给了我这个错误:
Failed to load resource: the server responded with a status of 404 (Not Found)
我注意到当我悬停控制台错误时,它会显示没有端口的请求字符串“http://localhost/api/services/names”。但我不认为这是问题所在,因为当我在Heroku平台上部署应用程序时它工作正常......问题出在localhost(我正在使用Mac OSX 10.10.2中的2010年中期macbook pro)
感谢任何帮助,谢谢你。
编辑: 按要求我在这里添加服务器代码
// server.js for Hypermedia Application project.
// BASE SETUP
//============================================================
// call packages
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(express.static(__dirname + "/public"));
// we use body-parser, so we need to be able to read data either from
// GET and POST:
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
// setting the application port to listen
var serverPort = process.env.PORT || 5000;
// --- database connection omitted ---
// API ROUTES
// ================================================================
// first of all: get the Router
var router = express.Router();
/**
* Services names
* /api/services/names - get - get all services ids and names
*/
router.route('/services/names')
.get(function (req, res) {
Service.find({}, 'id name', function (err, services) {
if (err)
res.send(err);
res.json(services);
});
});
// --- Other APIs omitted ---
// REGISTER ROUTES:
// all of our routes will be prefixed with /api
app.use('/api', router);
// START THE SERVER
//===================================================================
app.set("port", serverPort);
app.listen(serverPort, function() {
console.log(`Your app is ready at port ${serverPort}`);
});
答案 0 :(得分:2)
在您添加的服务器页面
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
在您的API之前
它可能对你有用CORS
答案 1 :(得分:-1)
亲爱的,我建议你写一下像
这样的总路径http://localhost:<your port number>/api/services/names
在fetch()中,你检查一次
我也尝试了,我获得了成功
答案 2 :(得分:-1)
您可以尝试修改fetch('http://'+window.location.host+':8080/api/services/...)