res.send不能正常工作

时间:2016-12-10 16:44:53

标签: javascript jquery ajax node.js

我正在使用一个带有jquery ajax和node.js的简单CRUD应用程序,只是为了通过node和ajax提高我的技能。问题是我正在做一个使用我在节点服务器中的post路由器处理的post请求,一切正常。它在我的products.json文件中增加了1个产品,但最终它没有将响应发送回客户端,最终res.send(“done”)不起作用,我不知道为什么。

这是代码:

AJAX

 ideasListFireRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            HashMap<String, HashMap> ideasList = (HashMap<String, HashMap>) dataSnapshot.getValue();//getting list
            idsList = new ArrayList<>( ideasListFire.keySet()); //list of IDs of picture to get from firebase storage                               //method to get pictures from firebase storage
            imagesTab = new HashMap<>();
            while (i < idsList.size()) {
                final long ONE_MEGABYTE = 1024 * 1024;

                StorageReference storageRef = FirebaseStorage.getInstance().getReferenceFromUrl(ideasListFire.get(idsList.get(i)).get("mainPic").toString());
                storageRef.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
                    @Override
                    public void onSuccess(byte[] bytes) {
                        // Got the download URL for 'users/me/profile.png'
                        Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                        imagesTab.put(idsList.get(i), bmp);
                        // testim.setImageBitmap(bmp);
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        // Handle any errors
                    }
                });

节点

$("#create-form").on('submit',function(){
    event.preventDefault();
    var createIn = $("#create-input").val();
    $.ajax({
        url: '/products',
        method:'POST',
        data:JSON.stringify({name:createIn}),
        contentType: "application/json",
        dataType: "json",
        success: function(data){
          console.log(data);
          $("create-input").val("");
          $("get-button").click(); 
        }
    });
})

这只是代码的重要部分,它可以正常工作,并且最终在res.send中失败了。

2 个答案:

答案 0 :(得分:0)

这不会直接回答您的问题,但理想情况下,在您知道工作已完成之前,您应该不会发回回复,并且您应该处理错误。换句话说,您应该使用回调。 (太多的回调可能会有问题,你应该调查其他模式 - 例如承诺 - 这里没有必要)

app.post('/products',function(req,res){
    fs.readFile('products.json','utf8',function(err,data){
        if (err) return res.send("error");
        var result = JSON.parse(data);
        var productName = req.body.name;
        console.log(req.body.name);
        currentId++;
        var productId = currentId;
        var product = {
            name: productName,
            id: productId
        }
        result.products.push(product);
        fs.writeFile(__dirname + "/products.json",JSON.stringify(result),'utf8', function(err, res) {
         if (err) return res.send("error");
         res.send("post done");
        });
     });

});

答案 1 :(得分:0)

您的客户端代码正在寻找json响应,但您正在返回一个字符串。

$("#create-form").on('submit',function(){
    event.preventDefault();
    var createIn = $("#create-input").val();
    $.ajax({
        url: '/products',
        method:'POST',
        data:JSON.stringify({name:createIn}),
        contentType: "application/json",
        dataType: "json",           <--------------
        success: function(data){
          console.log(data);
          $("create-input").val("");
          $("get-button").click(); 
        }
    });
})

删除此行或在服务器端添加

res.send({"message":"post done"});