我仍在探索REST,node.js和一般的Web开发。我发现在使用AJAX时,xmlhttprequest主要(如果不是总是)使用。据我所知,AJAX用于异步Javascript和XML。所以我的问题是我应该在我的node.js项目中使用xmlhttprequest,就在我想在我的网页上做异步部分的时候?或者node.js HTTP也有机会异步javascript?如何平衡HTTP和xmlhttprequest(或AJAX)的使用,以便我在所有REST API中都不会太乱?
P.S。因为XML,我有点不想使用AJAX。我听说XML的数据比JSON重得多,不值得再使用了。这是真的吗?你建议我做什么?
答案 0 :(得分:1)
节点上的非异步?
您正在尝试构建端点api,因此所有其他不使用异步的情况都应该抛出窗口。只要在node.js项目中有一个非异步代码,它就会冻结整个过程,直到完成为止。记住Node.js运行一个Thread(理论上),这意味着所有其他并发用户都会被冻结......这是让人们真的很难过的一种方式。
例如,你需要从客户端的get请求中读取一个来自Node.js服务器的文件(比如一个浏览器),你想让它成为一个回调/承诺永远不要与API服务器进行非异步没有理由不(在你的情况下)。以下示例
import * as express from "express";
import * as fs from 'fs';
let app = express();
app.get('/getFileInfo', function(req, res) {
fs.readFile('filePath', 'UTF-8', function(err, data) {
if (err) {
console.log(err);
res.json({error: err});
} else {
res.json({data: data});
}
})
});
//users will freeze while the file is read until it is done reading
app.get('/nonasync', function(req, res) {
let data = fs.readFileSync('path', 'utf-8');
res.json({data:data});
});
完全相同的想法适用于您的网络浏览器..如果您不打算在浏览器中执行异步操作javascript整个Web应用程序将无响应,因为它也以相同的方式运行,它有一个主循环,除非他们在回调/承诺/可观察的网站将冻结。 Ajax是一种更简洁/更好的方式,可以从服务器实现post / get / put / delete / get:id,然后是XMLHttpRequest。现在,这两种方法都可以选择发送和接收JSON,而不仅仅是XML。由于支持不同的浏览器兼容性规范,Ajax更安全,因为XMLHttpRequest在IE和Safari中有一些限制,我相信。
注意:如果您没有使用带有node.js的框架,那么它有助于保持您的端点整洁和可测试,并且能够将项目传递给其他人,而无需他们了解您实现您的请求的方式,res结构
节点的一些框架
您可能喜欢的某些Web浏览器框架
angular 2(我的偏好,因为我来自MEAN堆栈)
reactJS(由大蓝Facebook创建)
knockoutJS(简单易行)
所有浏览器框架都有自己的RESTful api实现,但更多的是倾向于Observable对象。