【问题标题】:Client side unable to hit its own server endpoint客户端无法访问自己的服务器端点
【发布时间】:2017-08-10 08:32:08
【问题描述】:

我有一个 AngularFullStack 项目,我正在尝试使用以下代码访问我的项目的服务器端点,但问题是调用没有从 angular 客户端传递到 nodejs 服务器。由于这是我的第一个项目,我几乎不知道可能会出现什么问题导致这种奇怪的冲突。

客户端:

$http({
        method: 'POST',
        url: '/api/soapAPIs/soapAPI',
        data: request,
        headers: {
          'Content-Type': 'application/json'
        }
      })
      .then(function(response) {
        console.log("response from server is: ", response);
      })
      .catch(function(error) {
        console.log("error in calling server is: ", error);
      });

我已经在服务器端安装了 CORS,并在 app.js 中编写了以下代码,但仍然无法正常工作。

服务器 App.js

// Setup server
var app = express();
var cors = require('cors');
//add cors to do the cross site requests
app.use(cors());

服务器端点代码:

export function soapAPI(req, res) {
  console.log("SERVER SIDE ", req.body);
  res.status(statusCode).json({"status":"success"});
  res.send();
}

以下是问题:

  1. 如果我尝试像 /api/soapAPIs/soapAPI 这样点击 nodejs 端点,浏览器会显示 pending 请求,并且它永远不会到达服务器。

  2. 当我像 http:localhost:9000/api/soapAPIs/soapAPI 这样为端点添加完整的分类 URL 时,它会命中端点,但客户端永远不会收到来自服务器的响应。出于显而易见的原因,我不想在客户端提供完整的分类 URL。

我该如何解决这个问题?如果您需要任何其他代码/信息,请告诉我。

编辑:

通过使用完全分类路径,服务器端点会被命中,但客户端永远不会收到它的响应。我在浏览器中收到此错误:

Possibly unhandled rejection: {"data":null,"status":-1,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"jsonpCallbackParam":"callback","url":"/api/things","headers":{"Accept":"application/json, text/plain, */*"}},"statusText":""}

【问题讨论】:

标签: javascript angularjs node.js express angular-fullstack


【解决方案1】:

取消注释以下行:

/*mongoose.connect(config.mongo.uri, config.mongo.options);
  mongoose.connection.on('error', function(err) {
  console.error(`MongoDB connection error: ${err}`);
  process.exit(-1); // eslint-disable-line no-process-exit
});
*/

基本上这会导致您的控制器不返回任何响应,因为您的 mongoose 模型被引用但与 mongo 的连接失败。

【讨论】:

    【解决方案2】:

    你必须使用res.send()发回请求

    app.post('/api/soapAPIs/soapAPI',function(req,res){
      console.log("SERVER SIDE ", req.body);
      res.status(statusCode).json({"status":"success"}}); 
    
      res.send();
    
    })
    

    【讨论】:

    • .json() 方法也会发送响应。你不必使用 .send() / expressjs.com/en/4x/api.html#res.json
    • @BadisMerabet 我在有和没有 res.send() 的情况下都试过了,但它仍然不起作用
    • 你有没有注意到这里有两个右花括号: res.status(statusCode).json({"status":"success"}});也尝试从(状态)中删除双引号(“)
    • 是的,这里只是一个错字。我的代码没有错误。
    猜你喜欢
    • 2013-12-27
    • 2021-01-25
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    相关资源
    最近更新 更多