我刚刚玩了一个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
修复此问题。
答案 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