2015-02-08 40 views
0

我有一個文本區域,用戶在文本中輸入內容。一旦他們點擊保存,文本區域中的內容就會發送到服務器端。在服務器端,我想使用內容來創建一個文件。我有一個名爲「usercode」的變量,它保存文本區域的內容。我創建一個文件,如何使用nodejs中的用戶輸入創建文件?

fs.wirteFile(name + "java", usercode, function(){}) 

命名文件名,由用戶給出。這確實創建了一個文件,但文件中唯一的東西是「[object Object]」。

這裏是我使用的玉我的客戶端:

extends layout 

block content 
div(id="ineditortxt") 
    h1(name="headings") #{title} 
    a(href='/signout', class='text-center new-account') Sign Out 
    div(id="editor") 
     |public class #{title}{ 
     | public static void main(String[] args) { 
     | 
     | } 
     |} 
    script(src="src/ace.js", type="text/javascript") 
    script(type="text/javascript"). 
     //var myRequest = new XMLHttpRequest(); 
     var editor=ace.edit("editor"); 
     editor.setTheme("ace/theme/monokai"); 
     editor.getSession().setMode("ace/mode/java"); 
     $(document).ready(function(){ 
      $("#save").click(function(event){ 
       var content = editor.getValue(); 
       $.ajax({ 
        url:'/getcode', 
        type:'POST', 
        data: content, 
        jsonpCallback: 'callback' 
       }); 
       event.preventDefault(); 
       return false; 
       }); 
      }); 
    form(name="Save", id = "save") 
     input(type="submit", value="Save") 
    div(id="result") 
     | 

這裏是服務器端的我並沒有包括所有的代碼,只是一個與此相關的問題:

var express = require('express'); 
var router = express(); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var param = require('express-params'); 
var Parse = require('parse').Parse; 
var http = require('http'); 
var fs = require('fs'); 
    router.post('/editor', function(req, res){ 
    name = req.body.newname; 
    res.render('Editor', {title: "" + name}); 
}); 

router.post('/getcode', function(req, res){ 
    var usercode = req.body; 
    fs.writeFile(name + ".java", usercode, function(err){ 
    if(err){ 
     console.log(err); 
    } else{ 
     console.log("The file is saved!"); 
    } 
    }) 
    res.send({code: "" + usercode}); 
    console.log(usercode); 
}); 

return router; 
} 
+0

使用JSON.stringify(用戶代碼)? – JuniorCompressor 2015-02-08 15:26:22

+0

這是有效的,除非用戶輸入:'System.out.println(「Hello World」);'然後文件保存爲:'{「System.out.println(\」Hello World \「);」: 「」}'。 – Suji 2015-02-08 15:36:46

回答

0

在客戶端進行反向轉義其固定字符串第一個字符串化JSON對象的代碼應該是:

$(document).ready(function(){ 
      $("#save").click(function(event){ 
       var content = editor.getValue(); 
       console.log("This is content: " + content); 
       $.ajax({ 
        url:'/getcode', 
        type:'POST', 
        data: {'code': content}, 
        processData: 'false', 
       }); 
       event.preventDefault(); 
       return false; 
       }); 
      }); 

在服務器端的代碼應該是:

router.post('/getcode', function(req, res){ 
    var usercode = req.body.code; 
    newname = name+".java"; 
0

您實際上正在將req.body對象寫入該文件,該文件是用於訪問請求中的發佈數據的JSON對象。

您需要通過表單字段名稱訪問該對象內的post數據,所以如果你有一個名爲「MyField的」表單域,它的數據將在req.body.myField

可如果你想只寫整個對象該文件,則需要使用JSON.stringify(req.body)

JSON.stringify是要逃,你可以通過使用unescape(string)

+0

這是有效的,除非用戶輸入:'System.out.println(「Hello World」);'然後文件保存爲:'{「System.out.println(\」Hello World \「);」: 「」}' – Suji 2015-02-08 15:44:32

+0

@Sujinthan通過回答更新。 – 2015-02-08 15:48:11

+0

不工作:這是我的代碼'fs.writeFile(name +「.java」,unescape(JSON.stringify(req.body)),function(err){' – Suji 2015-02-08 21:32:20

相關問題