2016-08-12 33 views
0

我有點卡住了,請幫助我。我試圖從HTML表單保存爲JSON文件。我沒有得到如何將數據從angularjs控制器移動到nodejs。如果我從控制器發送數據到Nodejs,我可以使用fs.write方法將表單數據保存爲json。我在這裏粘貼代碼。 我的HTML表單文件,保存爲使用Angularjs和Nodejs的HTML表單中的JSON文件

<div ng-controller="Ctrl" class="row"> 
      <form> 
       <p> 
        <label for="Name"> Name :</label> 
        <input id="Name" type="text" name="Name" ng-model="store.name"/><br /><br /> 
       </p> 
       <p> 
        <label for="age"> Age :</label> 
        <input id="age" type="text" name="age" ng-model="store.age"/><br /><br /> 
       </p><p> 
        <label for="sex"> Sex :</label> 
        <input id="sex" type="text" name="sex" ng-model="store.sex"/><br /><br /> 
       </p> 
      <textarea>{{store | json}}</textarea><br /> 
      <input type="submit" class="btn btn-primary" ng-click="send()"> 

這裏是我的app.js文件

var app = angular.module('app',['ui.router','ui.bootstrap','ngAnimate']) 
.controller('Ctrl',function($scope,$http){  
     $scope.data = {} 
     $scope.response = {} 

    $scope.send = function(){ 

     var receiveddata = $scope.store; 

     console.log(JSON.stringify(receiveddata));}) 

我能夠完全打印(receiveddata)成功在控制檯上。並且輸出顯示正常。

這裏是我的server.js文件。

var express = require("express"); 
var http = require('http'); 
var path = require('path'); 
var bodyParser = require('body-parser'); 
var fs = require('fs'); 
var formidable = require("formidable"); 
var util = require('util'); 

var app = express(); 
app.set('views', __dirname + '/views'); 
app.set('view engine' , 'ejs'); 

app.use(bodyParser.urlencoded()); 

app.use(express.static(path.join(__dirname,'public'))); 

app.get('/',function(req,res){ 
res.render('index',{ title: 'StoreAsJson' }); 
}); 
var server = app.listen(8000,function(){ 
var port = server.address().port; 
console.log("server is listening on port %s",port); 
}); 

任何人都可以幫助我解決這個問題。我已經從this鏈接寫入JSON文件代碼。我

回答

3

我會盡量展示一個使用MEAN堆棧的例子。

App.js:

(function(){ 
    'use strict'; 
    angular.module('app', [ 'ui.router','ui.bootstrap','ngAnimate' ]); 
})(); 

Controller.js:

angular 
    .module('app') 
    .controller('Ctrl', Ctrl); 

function Ctrl($scope, $http) { 

    $scope.send = function(){ 
     //Saving data into a single var -> JSON format 
     var userData = { 
         name : store.name, 
         age : store.age, 
         sex : store.sex 
     }; 

    // Calls Back-end api to save the new user 
    $http.post('/users', userData) 
     .success(function(data) { 
      console.log('Successfully posted '+ data); 
     }) 
     .error(function(data) { 
      console.log('Error while posting: ' + data); 
     }); 

    } 
} 

server.js:

// Dependencies 
var express   = require('express'); 
var mongoose  = require('mongoose'); 
var port   = process.env.PORT || xxxx; 
var bodyParser  = require('body-parser'); 
var app    = express(); 

// Sets the connection to MongoDB 
mongoose.connect("mongodb://localhost/UserApp"); 

. . . . . . 

// Routes 
require('./app/routes.js')(app); 

. . . . . . 

Routes.js:

這裏我使用MongooseMongoDB來存儲數據。發佈到/users。如果您轉到localhost:xxxx/users,您應該能夠使用方法查看您的所有用戶。

/** Requiring Factories **/ 
var UserFactory = require('./factories/user.factory.js'); 

// Opens App Routes 
module.exports = function(app) { 

    /** Posting a new user**/ 
    app.post('/users', function(req, res) { 
     //Calling postUser method from factory 
     UserFactory.postUser(req).then(function (user) { 
      console.log('Successfully posted '+ JSON.stringify(user)); 
      res.json(user); 
     }); 
    }); 

    /** Getting all the Users**/ 
    app.get('/users', function(req, res) { 
     UserFactory.getUsers().then(function (users) { 
      return res.json(users); 
     }, function (error) { 
      res.json(error); 
     }); 
    }); 

} 

user.factory.js:

//Requiring Mongoose user schema 
var Users = require('../models/user-model.js'); 

//Exposing getUsers and postUser to external calls 
exports.getUsers = getUsers; 
exports.postUser = postUser; 

/** Gets all the users stored in the DB **/ 
function getUsers() { 
    return new Promise(function (resolve, reject) { 
     //Opens Mongoose Query 
     var query = Users.find({}); 
     query.exec(function(err, users) { 
      if (err){ 
       return reject(err); 
      } 
      // If no errors are found, it responds with a JSON of all users 
      return resolve(users); 
     }); 
    }, function (error){ 
     return reject(error); 
    }); 
} 

/** Posting a new users**/ 
function postUser(req) { 
    return new Promise(function (resolve, reject) { 
     // Creates a new user based on the Mongoose schema and the post body 
     var newUser = new Users(req.body); 
     // New Points is saved in the db. 
     newUser.save(function(err) { 
      if (err){ 
       reject(err); 
      } 
      // If no errors are found, it responds with a JSON of the new user 
      resolve(req.body); 
     }); 
    }, function (error){ 
     return reject(error); 
    }); 
} 

用戶model.js:

//Pulls Mongoose dependency for creating schemas 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

// Creates a User Schema, it will automatically set an _id to a user 
var users= new Schema({ 
         name : {type : String}, 
         age : Number, 
         sex : {type : String} 
}); 

//Saves schema to DB 
module.exports = mongoose.model('users', users); 

如果你看一看如何MongoDBMongoose你應該工作讓它容易。

你問了一個非常寬泛的問題,所以這不是一個確切的答案。

PLUS

  • 避免使用的名稱,如Ctrl
  • 使用this

HTML:

send() -> myCtrl.send() 
store -> myCtrl.store.name, myCtrl.store.age, myCtrl.store.sex 

控制器:

angular 
.module('app') 
.controller('myCtrl', myCtrl); 

    function myCtrl($http) { 

     var vm = this; 

     vm.send = function(){ 
      //Saving data into a single var -> JSON format 
      var userData = { 
          name : vm.store.name, 
          age : vm.store.age, 
          sex : vm.store.sex 
      }; 

     // Calls Back-end api to save the new user 
     $http.post('/users', userData) 
      .success(function(data) { 
       console.log('Successfully posted '+ data); 
      }) 
      .error(function(data) { 
       console.log('Error while posting: ' + data); 
      }); 
     } 
    } 

我希望我已經幫助。

+0

非常感謝您的回覆。我不想更改我的網址,意味着如果我去**本地主機:xxxx /用戶**我會得到JSON數據,但我不想更改我的網址。當我點擊提交時,它會在同一頁面上保存表單數據到JSON文件。 – naik3

+0

嗨,ofc你不需要更改網址。這個例子是爲了告訴你,如果你想獲得你的用戶,你只需要調用'http.get'到'/ users'。因此,如果您需要顯示從那裏獲取的用戶數據,您只需進行一次調用,將該調用保存到一個變量中,然後以通常的方式從html中調用它。 – AndreaM16

+0

嗨,對不起,我不知道該怎麼辦。你可以請分享任何代碼。這裏在我的上面的代碼** receiveddata **變量包含適當的JSON數據,我只需要將它發送到服務器(nodejs)並保存爲JSON文件,當我按Submit按鈕。請幫我解決這個問題。 – naik3

相關問題