如何添加`jquery`来表达app

时间:2015-08-18 20:17:38

标签: node.js express socket.io npm

我刚刚玩了一个hello-world-chat express app(here)。我在index.html中注意到以下内容

<script src="/socket.io/socket.io.js"></script>

我已经安装了

npm install --save socket.io

表达如何知道它在哪里,因为没有像

这样的文件
/node_modules/socket.io/socket.io.js

例如,我想用jquery

做同样的事情
$> npm install --save jquery

<script src="/jquery/jquery.js"></script>

然而,这不起作用:(

有人可以向我解释一下这是如何运作的吗?如果可能的话,我可以为jquery修复此问题。

1 个答案:

答案 0 :(得分:2)

当你安装服务器端的socket.io库然后初始化socket.io服务器端时,你将它传递给你的快速应用程序对象。然后,它为private enum EUCountry { AT,BE,BG,HR,CY,CZ,DK,EE,FI,FR,DE,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,RO,SK,SI,ES,SE,GB, //28 member states GF,PF,TF, //French territories French Guiana,Polynesia,Southern Territories EL,UK, //alternative EU names for GR and GB ME,IS,AL,RS,TR,MK; //candidate countries public static boolean contains(String s) { for (EUCountry eucountry:values()) if (eucountry.name().equalsIgnoreCase(s)) return true; return false; } }; public static boolean isEU(Activity activity) { boolean error = false; /* is eu sim */ try { final TelephonyManager tm = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE); String simCountry = tm.getSimCountryIso(); if (simCountry != null && simCountry.length() == 2) { simCountry = simCountry.toUpperCase(); if (EUCountry.contains(simCountry)) { Log.v(TAG, "is EU User (sim)"); return true; } } } catch (Exception e) { error = true; } /* is eu network */ try { final TelephonyManager tm = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE); if (tm.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA && tm.getPhoneType()!=TelephonyManager.PHONE_TYPE_NONE) { String networkCountry = tm.getNetworkCountryIso(); if (networkCountry != null && networkCountry.length() == 2) { networkCountry = networkCountry.toUpperCase(); if (EUCountry.contains(networkCountry)) { Log.v(TAG, "is EU User (network)"); return true; } } } } catch (Exception e) { error = true; } /* is eu time zone id */ try { String tz = TimeZone.getDefault().getID().toLowerCase(); if (tz.length() < 10) { error = true; } else if (tz.contains("euro")) { Log.v(TAG, "is EU User (time)"); return true; } } catch (Exception e) { error = true; } if (error == true) { Log.v(TAG, "is EU User (err)"); return true; } return false; } 路由安装路由处理程序,并在请求该路由时,该处理程序从其自己的socket.io模块提供适当的客户端文件。客户端文件不在此确切路径上,并且不一定具有此文件名,但是当命中该路由时,服务器端socket.io安装的路由将为客户端socket.io支持提供适当的文件。 / p>

这样做有一个很好的优势,因为每次升级服务器端socket.io库时,您都会自动获得一个新的客户端库(嵌入在服务器端库中),它将始终保持不变两者同步。如果您提供单独的客户端库(来自CDN或您自己的路由),则必须确保同时升级客户端和服务器库。

如果您想从服务器提供jQuery,那么您可以使用/socket.io/socket.io.js将jQuery文件放在服务器上的已知位置,并使用express.static()配置指向特定路由到正确的位置。 See Serving Static Files in Express用于提供文档。

或者,如果你真的想像socket.io那样做,那么你可以为express.static()安装自己的路由,然后你提供jQuery文件(从你把它放在服务器上的任何地方)每当该路线被击中时。例如,这是一个自定义路由,用于通过您提到的/jquery/jquery.js命令来安装特定版本的jQuery:

npm install --save jquery