为什么我的快速API没有响应?

时间:2017-03-30 08:55:25

标签: node.js mongodb express mean-stack router

背景

我正在使用NodeJs v7测试一个简单的Hello World应用程序并在cloud9中表达。 我试图让我的榜样有效,但我失败了。

问题

我所有的cloud9配置都很好,所以这不是问题。问题是我的应用程序。当我调试时,路由“api / v1 / HolaBananas”永远不会被调用,我不知道为什么!

即使最糟糕的是,当我提出请求时,浏览器就会挂起,就像是在等待来自服务器的永远不会来的答案!

代码

index.js具有初始化和启动代码。由于模块化原因,我将此与api.js分开是很重要的。

index.js

"use strict";

const express = require("express");

const app = express();
app.use("/api/v1", require("./api.js"));

app.listen(process.env.PORT);
console.log(`Server listening on port ${process.env.PORT}!`);

api.js只包含路线及其应该做的事情。

api.js

"use strict";

const express = require("express");

module.exports = function() {

    const api = express.Router();       

    api.get("/HolaBananas", function(req, res){
        res.send("hello bananas!");
    });

    return api;
};

问题

我确信我没有以正确的方式使用api.get,但我真的想要将我的初始化和启动代码与api分开。

  • 如何修复我的代码以使其有效?

注意

我正在学习

课程

https://www.edx.org/course/introduction-mongodb-using-mean-stack-mongodbx-m101x-0

3 个答案:

答案 0 :(得分:1)

您可以通过以下两种方式修复它

@Bean
CORSFilter corsFilter() {
    CORSFilter filter = new CORSFilter();
    return filter;
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.addFilterBefore(corsFilter(), SessionManagementFilter.class).authorizeRequests().anyRequest().permitAll();
    http.csrf().disable();
}

因为API.js返回一个函数引用。所以你需要调用该函数来访问路由。

或者,如果您不想更改index.js,则需要按如下方式修改api.js

var api = require("./api.js")();
app.use("/api/v1", require("./api.js"));

答案 1 :(得分:0)

解决方案

虽然Vikash Sharma的解决方案可行,但我按照Jayant Patil的建议想出来并阅读其他问题:

原来我们遇到了同样的问题,但是这个问题的答案也允许我将api文件完全封装在函数中,保留其范围。

仍然,kudos ++尝试!

答案 2 :(得分:0)

有一个微妙的事情:你必须调用你在api.js中导出的函数并使用从该函数返回的路由器对象,所以这是你应该做的:

您必须替换此行:

app.use("/api/v1", require("./api.js"));

用这个:

app.use("/api/v1", require("./api.js")());