我正在使用一个带有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中失败了。
答案 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"});