简体   繁体   English

为什么Angualrjs无法将POST发送到我的Express服务器?

[英]Why is Angualrjs not sending POST to my Express server?

I have a node Express server running on localhost that serves a page with angularjs code. 我有一个在本地主机上运行的节点Express服务器,该服务器为包含angularjs代码的页面提供服务。 When the user press a button on the page, there's an angularjs controller that post a json back to the server. 当用户按下页面上的按钮时,会有一个angularjs控制器将json发送回服务器。

My problem is that the post doesn't seem to go to the server at all. 我的问题是,该帖子似乎根本没有发送到服务器。 I've checked the address and it's good. 我已经检查了地址,很好。 I've checked the button event and it does fire up. 我检查了按钮事件,它确实触发了。 I'm really at a loss here. 我真的很茫然。 I'm new to the MEAN stack so is there something I'm doing wrong? 我是MEAN堆栈的新手,所以我做错了什么吗?

The route that handles the post(routes/blogposts.js): 处理帖子的路由(routes / blogposts.js):

var express = require('express');
var router = express.Router();
var MongoClient = require('mongodb').MongoClient;
var URL = 'mongodb://localhost:27017/blog';


/* POST */
router.post('/', function(req, res, next) {

  process.stdout.write("hello: ");

});

module.exports = router;

The angular controller that sends the post 发送帖子的角度控制器

app.controller('PostController', ['$scope', function($scope) { 

   $scope.sendPost = function() {
        var id = document.getElementById("postTitle").value;
        var type = document.querySelector('input[name="postType"]:checked').value;
        var text = document.getElementById("postText").value;

        var currentDate = new Date();
        var day = currentDate.getDate();
        var month = currentDate.getMonth() + 1;
        var year = currentDate.getFullYear();
        var date = ("<b>" + day + "/" + month + "/" + year + "</b>");

        var sendObject = '{"id":' + id + ', "date": ' + date + ', "type":' + type + ', "post":' + 
                            text +'}';

        $http.post('http://localhost:3000/blogPosts', sendObject);


   };

}]);

EDIT: added the code to the express router below 编辑:将代码添加到下面的快递路由器

App.js App.js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');
var blogposts = require('./routes/blogposts');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);
app.use('/blogposts', blogposts);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});


module.exports = app;

您需要像这样将$http注入到控制器中:

app.controller('PostController', ['$scope', '$http', function($scope, $http) {

有角度的东西是发布到/ blogPosts而不是/。

following what mop said. 按照拖把说的。 Your angularjs controller is posting to: $http.post(' http://localhost:3000/blogPosts ', sendObject); 您的angularjs控制器发布到:$ http.post(' http:// localhost:3000 / blogPosts ',sendObject);

Honestly have no idea how to read your: The route that handles the post I think by showing that you make it harder to understand!. 老实说,不知道如何阅读您的内容:我认为通过显示您使您更难理解的方式来处理帖子 I don't think it adds any value to the question. 我认为这不会增加任何价值。

your code was confusing to read so i google it. 您的代码难以读取,所以我用google搜索。 http://expressjs.com/starter/hello-world.html http://expressjs.com/starter/hello-world.html

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});

you would need something more like... 您将需要更多类似...

app.post('/blogPosts', function (req, res) {
      res.send('Hello World!');
    });

but even if you did this it still feels fishy to me. 但是即使您这样做了,我仍然觉得可疑。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM