Nodejs本地API不起作用

时间:2017-06-14 09:55:34

标签: javascript node.js

我正在与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}`);
});

3 个答案:

答案 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/...)

之类的行