我注意到Node.js项目通常包含这样的文件夹:
/ libs,/ vendor,/ support,/ spec,/ tests
这究竟是什么意思?它们之间有什么不同,我应该在哪里包含引用的代码?
在基于PHP(或Java/ASP.NET/Ruby)的Web服务器中,每个客户端请求都在新线程上实例化.但是在Node.js中,所有客户端都运行在同一个线程上(它们甚至可以共享相同的变量!)我知道I/O操作是基于事件的,所以它们不会阻塞主线程循环.
我不明白的是为什么Node的作者选择它是单线程的?这让事情变得困难.例如,我无法运行CPU密集型功能,因为它阻塞了主线程(并阻止了新的客户端请求),因此我需要生成一个进程(这意味着我需要创建一个单独的JavaScript文件并在其上执行另一个节点进程) ).但是在PHP中,cpu密集型任务不会阻止其他客户端,因为我提到每个客户端都在不同的线程上.与多线程Web服务器相比,它有哪些优势?
注意:我已经使用群集来解决这个问题,但它并不漂亮.
我有一个用户的mongoose模式(UserSchema),我想验证电子邮件是否具有正确的语法.我目前使用的验证如下:
UserSchema.path('email').validate(function (email) {
return email.length
}, 'The e-mail field cannot be empty.')
Run Code Online (Sandbox Code Playgroud)
但是,这仅检查字段是否为空,而不是语法.
是否已经存在我可以重复使用的东西,或者我必须提出自己的方法并在validate函数中调用它?
我是React-Redux技术的新手,我希望你能帮助我实现一些功能.
我想用套接字(socket.io)实现一个聊天应用程序.首先,用户必须注册(我在服务器端使用护照),之后,如果注册成功,则用户必须连接到webSocket.
我认为最好的方法是使用像管道这样的中间件来执行所有操作,并根据什么样的操作获取中间件,做不同的事情.
如果操作类型是AUTH_USER
,则创建客户端 - 服务器连接并设置将来自服务器的所有事件.
如果操作类型是MESSAGE
向服务器发送消息.
代码片段:
----- socketMiddleware.js ----
import { AUTH_USER, MESSAGE } from '../actions/types';
import * as actions from 'actions/socket-actions';
import io from 'socket.io-client';
const socket = null;
export default function ({ dispatch }) {
return next => action => {
if(action.type == AUTH_USER) {
socket = io.connect(`${location.host}`);
socket.on('message', data => {
store.dispatch(actions.addResponse(action.data));
});
}
else if(action.type == MESSAGE && socket) {
socket.emit('user-message', action.data);
return next(action)
} else {
return next(action)
} …
Run Code Online (Sandbox Code Playgroud) 也许这里没有确定的答案,但我想知道在处理express.js和mongoose时在哪里处理数据验证.以下哪项是最佳实践(我目前使用的是组合,并且开始感觉非常笨拙):
我读过的一些旧帖子是:
但是相互矛盾的答案只会增加混乱.也许它根本就不清楚,在哪种情况下是一个更好的选择?