Javascript res.send无法正常工作
我正在使用一个带有jquery ajax和node.js的简单CRUD应用程序,只是为了提高我使用node和ajax的技能。问题是,我正在做一个post请求,该请求由节点服务器中的post路由器处理,一切正常。它在我的products.json文件中又添加了1个产品,但最终它没有将响应发送回客户端,最终的res.send(“done”)不起作用,我也不知道原因 代码如下: ajaxJavascript res.send无法正常工作,javascript,jquery,ajax,node.js,Javascript,Jquery,Ajax,Node.js,我正在使用一个带有jquery ajax和node.js的简单CRUD应用程序,只是为了提高我使用node和ajax的技能。问题是,我正在做一个post请求,该请求由节点服务器中的post路由器处理,一切正常。它在我的products.json文件中又添加了1个产品,但最终它没有将响应发送回客户端,最终的res.send(“done”)不起作用,我也不知道原因 代码如下: ajax $("#create-form").on('submit',function(){ event.preve
$("#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();
}
});
})
节点
app.post('/products',function(req,res){
fs.readFile('products.json','utf8',function(err,data){
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');
});
res.send("post done");
});
这只是代码的重要部分,它在res.send中工作,但最终失败 这不会直接回答您的问题,但在您知道工作已经完成之前,最好不要发回回复,并且您应该处理错误。换句话说,您应该使用回调。(太多的回调可能会产生问题,您应该研究其他模式-例如承诺-这里没有必要)
您的客户机代码正在寻找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();
}
});
})
您使用哪个节点库进行路由?我直接进行,没有路由,因为我不需要它用于这个小应用程序。您的变量是什么?var app=express()的一个实例;尝试在客户端代码上添加错误函数,要查看是否得到响应,这显然是编写routeHandler的更好方法,但我觉得如果他的问题是,
res.send
没有将响应发送回客户端,这不会解决他的问题。您也可以执行fs.readFileSync
和fs.writeFileSync
使其同步,我知道如何处理错误,问题是我没有收到任何错误,我的服务器只是没有响应。@NikhilMotiani我强烈建议不要在服务器中使用readFile
和writeFile
的Sync
变体。节点是单线程的,所以同步调用是阻塞的,这意味着当它们执行时,不能执行其他操作。换句话说,在同步调用finish.fs.readFileSync和writeFileSync无法解决我的问题之前,服务器将冻结。我需要知道发生了什么,它会将产品添加到我的product.json,但不会发送回我的ajax请求谢谢你的回答,现在我得到res.send答案,但是,它是否应该继续在成功的ajax上运行,并在成功的基础上运行3行呢?worketd,专注于其他事情,忘记了主要内容,我忘记了2行ofc上的id。它不工作,但在数据类型出现问题之前,非常感谢您的大眼:)
$("#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"});