快速路线&多个文件中需要相同的对象

时间:2017-07-06 12:52:00

标签: javascript node.js express

我创建了一个Web应用程序,其中我的所有服务器端都在同一个文件中。 要清楚,在我的" app.js"我有:

  • 快速路线
  • Socket.io事件等......
  • 区分对象与页面事件的反应

我想重做那个项目来正确地做事,我开始这么做了。我已将我的路由放在不同的js文件中,例如 login.js subscribe.js ,...在 routes 目录中。

在我的 app.js 中,我添加了一行:import android.content.res.Configuration; import android.media.AudioManager; import android.media.MediaPlayer; import android.os.AsyncTask; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.os.Bundle; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.ImageButton; import java.io.IOException; import static android.media.AudioManager.STREAM_MUSIC; public class MainActivity extends AppCompatActivity { ImageButton id_play; MediaPlayer mediaPlayer; boolean prepared = false; boolean started =false; String stream ="http://arabelfm.ice.infomaniak.ch/arabelprodcastfm.mp3"; //main_page contain arabel_photo player for radio private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mToggle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ///////////////////////////////////////////////////////////////////////////// id_play = (ImageButton) findViewById(R.id.id_play); id_play.setEnabled(false); //id_play.setText("LOADING"); mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); new PlayerTask().execute(stream); id_play.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (started){ started=false; mediaPlayer.stop(); id_play.setImageResource(R.drawable.play); // id_play.setText("PLAY"); } else { started=true; mediaPlayer.start(); id_play.setImageResource(R.drawable.pause); //id_play.setText("PAUSE"); } } }); //main_page contain arabel_photo player for radio//////////////////////////: mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); mToggle=new ActionBarDrawerToggle(this,mDrawerLayout, R.string.open,R.string.close); mDrawerLayout.addDrawerListener(mToggle); mToggle.syncState(); getSupportActionBar() .setDisplayHomeAsUpEnabled(true); getSupportActionBar() .setHomeButtonEnabled(true); } ////////////////////////////////////////////////////////////////////////////////////////////////////////// class PlayerTask extends AsyncTask<String,Void,Boolean>{ @Override protected Boolean doInBackground(String... strings) { try { mediaPlayer.setDataSource(strings[0] ); mediaPlayer.prepare(); prepared=true; } catch (IOException e) { e.printStackTrace(); } return prepared; } @Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); id_play.setEnabled(true); id_play.setImageResource(R.drawable.play); // id_play.setText("PLAY"); } } @Override protected void onStop () { super.onStop(); } @Override protected void onPause() { super.onPause(); if(started){ mediaPlayer.pause(); } } @Override protected void onResume() { super.onResume(); if(started){ mediaPlayer.start(); } } @Override protected void onDestroy() { super.onDestroy(); if(prepared){ mediaPlayer.release(); } } ///////////////////////////////////////////////////////////////////////////////////////////////////// //main_page contain arabel_photo player for radio//////////////////////////: @Override public boolean onOptionsItemSelected(MenuItem item) { if (mToggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } }

我在 / routes 中有 index.js 文件,其中我放置了我的&#34; Express路由器&#34;这是管理我所有的路线。

index.js

require('./routes')(app);

这是正确的路线方式吗?

我遇到的问题是我有一个名为module.exports = function (app) { app.get('/signup', require('./subscribe').get); app.post('/signup', require('./subscribe').post); app.get('/', require('./login').get); app.post('/', require('./login').post); ... } 的对象,我在成员登录时填写了一些属性等等... 这个对象位于我的 app.js 文件中,我无法从 login.js 等其他文件中找到它...

app.js

usersConnected {}

login.js

  1. // Express routing defined in ./routes/index.js require('./routes')(app); // Globals variables var usersConnected = {}; var rooms = {}; ...

    的使用示例
    usersConnected
  2. 以及我如何导出我的&#34;路由管理&#34;

    // If login and password matches with couple in database
                usersConnected[login] = {
                    games: rows[0].games,
                    kills: rows[0].kills,
                    deaths: rows[0].deaths,
                    statut: "ACCUEIL",
                    adversaire: "NULL",
                    socket: "NULL",
                    wsId: "NULL",
                    room: "NULL",
                    lsid: funcs.computeRandomLsId(64)
                };
    

    我有一些想法,但我认为这是一种糟糕的方式,例如在我需要的地方导出我的对象或将我的对象单独放在一个将导入的.js文件中等等......

  3. 如果你能给我一些真正帮助我的小道。

    编辑:我认为我的问题是我管理会话的方式,因为exports.get = (req, res) => { if (!req.session.login) ... } 包含所有连接用户的所有信息...也许我应该使用 express-session

1 个答案:

答案 0 :(得分:0)

我建议你看一下express-generator:http://expressjs.com/en/starter/generator.html。它为您提供了一个非常好的文件结构。虽然它很自以为是,但当我开始时它仍然非常有用。

在app.js文件中,你会发现如下内容:

...
var routes = require('./routes/index');
app.use('/', routes);

如果你有很多路线,这有点儿了。在这里你有一个代码片段来做这个动态。 gist

无论如何,重点是快递发生器将帮助您疏散疑虑并指出正确的方向。