【问题标题】:Node js and Angular js节点 js 和 Angular js
【发布时间】:2017-01-06 10:16:41
【问题描述】:

我要通过 Angular js 将用户输入的文本发送到 Node js 问题是节点 js 服务器识别事件但没有获取数据并打印它我知道我在代码中犯了一些错误并且不知道如何修复它。有人可以请修复此代码。

angular.js

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
   $scope.submit= function(){
      var data = {
          id : "Angkirat"
          Password : "Sandhu"
      }

      $http.post("http://localhost:8081/meow", data)
        .success(function(req,res) {
         console.dir(req.body);
         res.send(req.body);
         alert("hogaya")
       }).error(function() {

      });
   }
});

服务器.js

var express = require('express'); 
var app = express();
var bodyParser = require('body-parser');
var cors = require('cors');
var http = require("http");
var fs = require("fs");
var url = require("url");
var display = "";

http.createServer(function(request,response){
    var pathname = url.parse(request.url).pathname;
    console.log("Request for" + pathname + "received.");
    fs.readFile(pathname.substr(1),function (err,data){
        if(err){
            console.log(err);
            response.writeHead(404, {'Content-Type': 'text/html'});
        }else{
            response.writeHead(200, {'Content-Type': 'text/html'});
            response.write(data.toString());
        }
        app.use(cors());
        app.use(bodyParser.json());
        app.post('/meow', function(req, res){
            var cope = req.body.params;
            display = cope;
            console.log(cope);
        });
        response.end();
    });
}).listen(8080);
console.log(display)

请有人帮我解决这个问题。

【问题讨论】:

  • 您是否尝试“req.body”来获取数据而不是“req.body.params”我认为这是问题
  • 您还应该检查您使用的角度版本。从 Angular 1.6 开始,您不再能够将 .success().error()$http.post 一起使用。请改用.then()
  • .error(function() { } — 您是否考虑过编写一个错误函数,当您收到错误时实际报告错误?!
  • 版本是1.0.4,帖子连错误都没有显示

标签: javascript angularjs node.js angularjs-1.6


【解决方案1】:

您正在8080 中启动服务器,但您从http://localhost:8081/meow 访问您的服务

【讨论】:

  • 我试过上面的建议,但还是不行
  • 它是否进入 app.post() 函数......如果它进入我看不到 res.send(json) 从那里将触发你的 angularjs 代码。
  • Request for/webpage.htmlreceived. Request for/app.jsreceived. 这是我在终端运行代码并执行提交函数时得到的
  • 你能把console.log放在post里面看看是否触发...
【解决方案2】:

服务端代码在客户端代码中

  //ERRONEOUS
  $http.post("http://localhost:8081/meow", data)
    .success(
      //-------------------------------------
      //THESE LINES BELONG IN THE SERVER CODE
      function(req,res) {
        console.dir(req.body);
        res.send(req.body);
      //-------------------------------------
        alert("hogaya")
   }).error(function() {

  });

$http 服务的.success 方法有不同的签名:

 $http.post(url, data)
   .success(function onSuccess(data, status, headers, config) {
       // Handle success

更新

已从 AngularJS 1.6 中删除了已弃用的 .success.error 方法。

由于 b54a39$http 的已弃用自定义回调方法 - .success().error() - 已被删除。您可以改用标准的.then()/.catch() promise 方法,但请注意方法签名和返回值不同。

$http(...)
  .then(function onSuccess(response) {
    // Handle success
    var data = response.data;
    var status = response.status;
    var statusText = response.statusText;
    var headers = response.headers;
    var config = response.config;
    ...
  }).catch(function onError(response) {
    // Handle error
    var data = response.data;
    var status = response.status;
    var statusText = response.statusText;
    var headers = response.headers;
    var config = response.config;
    ...
  });

更多信息请见AngularJS Developer Guide - Migrating to v1.6 - http

【讨论】:

【解决方案3】:

在 server.js 文件控制台中 req.body 而不是 req.body.params

    app.post('/meow', function(req, res){
    console.log(req.body);
    console.log(req.body.id) //to access the id
    console.log(req.body.Password) //to access the password
    });
    response.end();

【讨论】:

    【解决方案4】:

    在你的 Angular 中设置以下标题,它应该可以工作

    .config(函数 ($httpProvider) {

        $httpProvider.defaults.headers.common = {};
        $httpProvider.defaults.headers.post = { 'Content-Type': 'application/json' };
        $httpProvider.defaults.headers.put = { 'Content-Type': 'application/json' };
        $httpProvider.defaults.headers.patch = {};
    })
    

    【讨论】:

      【解决方案5】:

      您在请求正文中传递数据(在 angularJS 中),但尝试从 params (Node.JS) 访问数据

      app.post('/meow', function(req, res){
        var cope = req.body.params;   //Change this line to var cope = req.body
        display = cope;
        console.log(cope);
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-06
        • 2015-10-25
        • 1970-01-01
        • 2018-09-28
        • 2015-10-03
        相关资源
        最近更新 更多