首页 程序员大本营 98sky.com 程序员问答大本营 98sky.com.
Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 17

0
votes
answers
6 views
+10

如何在python中使用隨機函數?

-2
#program to tic-tac-toe 
from random import * 
num=[i for i in range(1,10)] 
flag=0 
ulist=list(); 
xlist=list(); 
olist=list(); 
count=0 
while(count < 9): 
    if(flag==0): 
    x=random.choice(num) 
    if(x not in ulist): 
     ulist.append(x) 
     xlist.append(x) 
     flag=1 
    if(flag==1): 
    o=random.choice(num) 
    if(o not in ulist): 
     ulist.append(o) 
     olist.append(o) 
     flag=0 
    count+=1 

print (ulist) 
print (xlist) 
print (olist) 

這是我的代碼,我呼籲隨機函數,但仍其說,我沒有使用隨機函數如何在python中使用隨機函數?

+1

'X =的choise(NUM)'或'進口random'並保存代碼 – splash58

沙发
0
0

隨機函數的正確用法:

在連續數randint的情況下或randrange是也許是最好的選擇,但如果你在一個序列中有多個不同的值(即列表),你也可以使用的選擇:

>>> import random 
>>> values = list(range(10)) 
>>> random.choice(values) 
5 

選擇也適用於一個項目從沒有連續的樣本:

>>> values = [1, 2, 3, 5, 7, 10] 
>>> random.choice(values) 
7 

如果你需要 「強加密」 這裏還有在Python 3.6 secrets.choice和更新:

>>> import secrets 
>>> values = list(range(10)) 
>>> secrets.choice(values) 
2 
板凳
0
0
from random import * 

不符合

random.choice() 

要麼兼容做

import random 
... 
random.choice() 

from random import * 
.... 
choice() 
0
votes
answers
2 views
+10

F#異步HTTP請求 - 解析JSON響應

1

我試圖使用F#下面的代碼片斷髮送異步POST請求火力地堡:特別是下列的操作,這允許匿名登錄:F#異步HTTP請求 - 解析JSON響應

https://firebase.google.com/docs/reference/rest/auth/#section-sign-in-anonymously

let makePostRequest (url : string) (requestBody : string) = 
    let req = WebRequest.CreateHttp url 
    req.CookieContainer <- new CookieContainer() 
    req.Method <- "POST" 
    req.ProtocolVersion <- HttpVersion.Version10 
    let postBytes = requestBody |> System.Text.Encoding.ASCII.GetBytes 
    req.ContentLength <- postBytes.LongLength 
    req.ContentType <- "application/xml; charset=utf-8" 
    async{ 
     use! reqStream = req.GetRequestStreamAsync() |> Async.AwaitTask 
     do! reqStream.WriteAsync(postBytes, 0, postBytes.Length) |> Async.AwaitIAsyncResult |> Async.Ignore 
     reqStream.Close() 
     use! res = req.AsyncGetResponse() 
     use stream = res.GetResponseStream() 
     use reader = new StreamReader(stream) 
     let! rdata = reader.ReadToEndAsync() |> Async.AwaitTask   
     return rdata 
    } 

我打電話,如下所示:

let url = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=XXXXXXXXXXXXXXXXX" 
    let data = "returnSecureToken=true" 
    makePostRequest url data 

我很新的F#,有點搞不清關於這是如何工作的。我如何從這個請求中獲得JSON響應?我如何知道何時完成?這會阻止主線程上的UI嗎?我做的是翻譯的斯威夫特以下代碼塊:

Auth.auth().signInAnonymously(completion: { (user, error) in 

     if let err = error { 
      print(err.localizedDescription) 
      return 
     } 

    }) 

這裏的一切對我來說很有意義,因爲我們有一個完成塊的方法執行完畢後調用的,而且我們知道,user變量包含從服務器獲得的響應,這在F#中對我來說意義不大。

UPDATE:

繼在意見的建議,我已引用F#數據:HTTP實用程序,並創建了下面的代碼片段:

let url = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=XXXXXXXXXXXX" 
Http.RequestString 
    (url, 
     headers = [ ContentType HttpContentTypes.Json ], 
     body = TextRequest """ {"returnSecureToken": true} """) 

然而,這會產生錯誤The value, namespace, type or module Http is not defined

UPDATE 2: 我已經解決了以下代碼:

let fetchUrl callback url (requestBody : string) =   
    let req = WebRequest.Create(Uri(url)) 
    req.Method <- "POST" 
    let postBytes = requestBody |> System.Text.Encoding.ASCII.GetBytes 
    req.ContentLength <- postBytes.LongLength 
    req.ContentType <- "application/json; charset=utf-8" 
    let reqStream = req.GetRequestStream() 
    reqStream.Write(postBytes, 0, postBytes.Length); 
    reqStream.Close() 

    use resp = req.GetResponse() 
    use stream = resp.GetResponseStream() 
    use reader = new IO.StreamReader(stream) 
    callback reader url 

let myCallback (reader:IO.StreamReader) url = 
    let html = reader.ReadToEnd() 
    let html1000 = html.Substring(0,1000) 
    printfn "Downloaded %s. First 1000 is %s" url html1000 
    html  // return all the html 


let openLandlord() = 
    let url = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=XXXXXXXXXXXXXXXXXXX" 
    let requestBody = """ {"returnSecureToken": true} """ 
    fetchUrl myCallback url requestBody 

以下這裏的例子:

https://fsharpforfunandprofit.com/posts/fvsc-download/

但是當我打電話openLandlord功能在這裏:

override x.ViewDidLoad() = 
    base.ViewDidLoad() 
    openLandlord() 

我收到以下錯誤:

這種表達預計有型但是這裏有字符串。

enter image description here

錯誤:

  1. 在或結合在此點之前的不完全的結構化構建體。
  2. 未定義構造函數請求的值。
  3. 成員定義中的意外關鍵字匹配。
  4. 未定義值,名稱空間,類型或模塊響應。
  5. 成員定義中意外標識。
+1

你的問題太廣泛了。並且您將一個高級API與另一個低級API進行比較。如果需要,可以將請求處理委託給庫。例如,FSharp.Data具有很好的HTTP實用程序:http://fsharp.github.io/FSharp.Data/library/Http.html –

+0

我不認爲它太寬泛...我想要做的就是發送一個HTTP POST請求異步而不會阻塞UI,然後在閉包塊(或與其等效的東西)中獲得此請求的JSON響應。我試過使用Http.fs,但是這不會爲xamarinios安裝顯然 – Alk

+1

對不起,我剛剛閱讀「有點困惑,這是如何工作的」作爲鼓勵我詳細解釋代碼的細節,這需要太廣泛的答案。如果您只想從響應數據獲取JSON,則可以使用FSharp.Data或.NET Newtonsoft.JSON中的特定於F#的JSON類型提供程序。兩者都有很多例子。如果您使用異步操作,UI線程將會很好。 –

沙发
0
1

檢查下面的代碼:

open System 
open System.Net 
open FSharp.Data 

type Response = JsonProvider<""" { "name":"John", "age":94 } """> 

[<EntryPoint>] 
let main argv = 
    let request() = 
    async { 
     let url = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=XXXXXXXXXXXX" 
     return! Http.AsyncRequestString 
     (url, 
      headers = [ "Content-Type", HttpContentTypes.Json ], 
      body = TextRequest """ {"returnSecureToken": true} """) 
    } |> Async.Catch 
    let result = request() 
       |> Async.RunSynchronously 
    match result with 
    | Choice1Of2 text -> let json = Response.Parse text 
         printfn "name: %A" json.Name 
    | Choice2Of2 e -> printfn "request failed: %A" e 
    0 // return an integer exit code 

如果類型提供不與您的設置工作,這可能會幫助:https://github.com/Microsoft/visualfsharp/issues/3303

更換樣品JSON什麼是從服務的預期。

+0

可否請你看看更新? – Alk

+0

這不是異步,它不解析JSON,它不會捕獲錯誤... –

+0

我知道,問題是我無法讓您的代碼在iOS設置中工作我必須將其構建,我對F#非常陌生,並且不太瞭解代碼中的控制流程以及如何使用它,我不想簡單地複製粘貼某些我無法理解的內容......而代碼更直截了當,我明白它是如何工作的。 – Alk

0
votes
answers
5 views
+10

如何從mysql刪除pma表而不影響其他表

0

我的phpMyAdmin安裝出現問題。我無意中點擊了一些創建phpMyAdmin使用的表的東西。 (可能提升功能)。如何從mysql刪除pma表而不影響其他表

[See Image]1

我有一些問題:

  1. 這是否會影響其他表?
  2. 這張表有什麼用?
  3. 如何在phpMyAdmin中完全禁用高級功能並刪除這些pma表?
+0

不,這不會影響您的任何代碼/查詢。你不應該刪除它們。 – urfusion

+0

@urfusion感謝您的迴應,如果我想刪除它們,我應該如何? –

+0

這些表包含的信息包括'phpmyadmin'和它們的配置。你爲什麼要刪除它們? – urfusion

沙发
0
0

phpMyAdmin提供創建這些表以供您存儲程序高級功能的配置信息。這些表是可選的。通常他們被放在'phpmyadmin'數據庫中,但是如果你沒有權限創建一個新的數據庫,這些表可以放在你有權訪問的數據庫中。根據你的意見,這似乎是發生在這裏。

您可以通過任何常規手段刪除它們刪除表 - 無論是從每個表本身去操作選項卡,然後單擊「刪除表(DROP)」鏈接,或者去數據庫結構標籤,選擇以「pma__」開頭的那個,然後從「With selected:」下拉框中選擇「Drop」。

您有可能會遇到由於嘗試寫入歷史記錄表而導致寫入歷史記錄表的錯誤,在此情況下,註銷並重新登錄應該爲您清除錯誤。

爲了回答您的其他問題:

這會影響其他表?

不,每個表格的操作是相互獨立的。

這張表的用途是什麼?

各種phpMyAdmin的功能,如圖形表關係編輯器,查詢歷史和書籤,以及用戶的喜好。

如何完全禁用phpMyAdmin中的高級功能並刪除這些pma表?

只需刪除表。要完全刪除有關缺少表中的任何警告,您可以編輯config.inc.php文件,添加$cfg['PmaNoRelation_DisableWarning'] = true; 並禁用自動創建這些的可能性增加$cfg['ZeroConf'] = false;

0
votes
answers
1 views
+10

JavaFX 8:FXML的重用

0

鑑於我有一個FXML表示創建數據記錄的表單。如果我僅將此FXML用於CreateRecordController,我可以直接在FXML中綁定控制器,並使用fx:id將控件綁定到此控制器。JavaFX 8:FXML的重用

但是,如果我想重複使用此FXML作爲EditRecordController,我該怎麼辦?我無法在FXML中綁定兩個控制器。有沒有辦法在FXML加載器中執行此綁定?

沙发
0
2

在加載fxml之前,您可以將控制器實例傳遞給FXMLLoader。這就要求fx:controller屬性是從FXML文件缺失:

Object controller = ... // create an instance of the desired controller class here 

FXMLLoader loader = new FXMLLoader(getClass().getResource("/some/path/myfxml.fxml")); 
loader.setController(controller); 

Node root = loader.load(); 

注:綁定是錯誤的術語在這裏,因爲你不分配控制器任何JavaFX的財產。

0
votes
answers
2 views
+10

在firestore中添加新密鑰時,應用程序崩潰

1

我使用github做了一個測試應用程序,後面跟着Google的例子,但有一些變化(在firestore中使用的鍵較少,過濾器少一些)。在firestore中添加新密鑰時,應用程序崩潰

問題是這樣的,當我在firestore中添加新密鑰時,應用程序崩潰,但該應用程序使用了先前添加的兩個密鑰。

崩潰並顯示錯誤fatalError("error")。我不明白爲什麼有兩個鍵的應用程序工作,但如果我開始使用第三個鍵(大廳),那麼應用程序崩潰。

可能是什麼問題?

這是我的代碼:

class ViewControllerTwo: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet var tableView: UITableView! 

    private var sweets: [Sweet] = [] 
    private var document: [DocumentSnapshot] = [] 

    fileprivate var query: Query? { 
     didSet { 
      if let listener = listener { 
       listener.remove() 
      } 
     } 
    } 

    private var listener: FIRListenerRegistration? 

    fileprivate func observeQuery() { 

     guard let query = query else { return } 

     stopObserving() 

     listener = query.addSnapshotListener { [unowned self] (snapshot, error) in 

      guard let snapshot = snapshot else { 

       print("Error fetching snapshot results: (error!)") 

       return 

      } 

      let models = snapshot.documents.map { (document) -> Sweet in 

       if let model = Sweet(dictionary: document.data()) { 

        return model 

       } else { 

        fatalError("error") 

       } 

      } 

      self.sweets = models 

      self.document = snapshot.documents 

      self.tableView.reloadData() 

     } 

    } 

    @IBAction func filterButton(_ sender: Any) { 
     present(filters.navigationController, animated: true, completion: nil)  
    } 

    lazy private var filters: (navigationController: UINavigationController, filtersController: FilterViewController) = { 
     return FilterViewController.fromStoryboard(delegate: self) 
    }() 

    fileprivate func stopObserving() { 
     listener?.remove() 
    } 

    fileprivate func baseQuery() -> Query { 
     return Firestore.firestore().collection("sweets").limit(to: 50)  
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     query = baseQuery()  
    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(true) 

     observeQuery() 
    } 

    override func viewWillDisappear(_ animated: Bool) { 
     super.viewWillDisappear(true) 

     stopObserving()  
    } 

    deinit { 
     listener?.remove()  
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return sweets.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ViewControllerCell 

     let sweet = sweets[indexPath.row] 

     cell.studioNameLabel.text = sweet.name 
     cell.studioAddressLabel.text = sweet.content 
     cell.hallNameLabel.text = sweet.hall 

     return cell 

    } 

} 

extension ViewControllerTwo: FiltersViewControllerDelegate { 

    func query(withCategory title: String?) -> Query { 

     var filtered = baseQuery() 

     if let title = title, !title.isEmpty { 
      filtered = filtered.whereField("title", isEqualTo: title) 
     } 

     return filtered 
    } 

    func controller(_ controller: FilterViewController, didSelectCategory title: String?) { 

     let filtered = query(withCategory: title) 

     self.query = filtered 
     observeQuery() 

    } 
} 

class ViewControllerCell: UITableViewCell { 

    @IBOutlet weak var studioNameLabel: UILabel! 
    @IBOutlet weak var studioAddressLabel: UILabel! 
    @IBOutlet weak var hallNameLabel: UILabel! 

} 

而且我的結構:

protocol DocumentSerializable { 
    init?(dictionary:[String:Any]) 
} 
struct Sweet { 
    var name:String 
    var content:String 
    var hall:String 
    var dictionary:[String:Any] { 
     return [ 
      "name": name, 
      "content" : content, 
      "hall" : hall 
     ] 
    } 
} 
extension Sweet : DocumentSerializable { 

    static let title = [ 
     "one", 
     "two", 
     "three", 
     "four" 
    ] 
    init?(dictionary: [String : Any]) { 
     guard let name = dictionary["name"] as? String, 
      let content = dictionary["content"] as? String, 
      let hall = dictionary["hall"] as? String else { return nil } 

     self.init(name: name, content: content, hall: hall) 
    } 
} 

我在谷歌項目帶動

google drive

google service info.plist

+0

嘗試打印'Sweet(dictionary:document.data())'並檢查它是否爲'nil' –

+0

@DharmeshKheni in'fatalError()'? – Dima

+0

以上'如果讓模型=甜(字典:document.data())' –

沙发
0
0

只需向現有結構中添加任何新密鑰,您就需要重新安裝應用程序。

所以你應該在結構實現之前決定你需要什麼鍵。或者,如果將來添加新密鑰,則可以重新安裝應用程序。

0
votes
answers
4 views
+10

如何重命名數據存儲實體字段,但能夠通過舊的和新的屬性名稱檢索記錄?

0

我有一個實體如何重命名數據存儲實體字段,但能夠通過舊的和新的屬性名稱檢索記錄?

class Foo { 
    public String bar; 
} 

我想重命名 「酒吧」 到 「somethingElse」。並計劃使用Objectify的@AlsoLoad註解來實現這一點(我已經在使用Objectify進行持久化)。因此,像:

class Foo { 
    @AlsoLoad("bar") 
    public String somethingElse; 
} 

但形式有任何疑問:

final Query<Foo> query = OfyService.ofy().load().type(Foo.class) 
    .filter("somethingElse", "someValue"); 

只擷取自重命名已保存的實體。任何較舊的實體都被忽略。

什麼是重命名實體字段的最佳做法,以便我可以有一個將返回所有記錄的單個查詢?

沙发
0
3

注意:我不是一個客觀化的用戶,答案是通用的,所以你必須適應物化的細節。

一般要避免同時使用barsomethingElse爲長時間,主要是因爲尋找匹配實體轉化爲OR類型的查詢 - .filter("bar", "someValue")OR.filter("somethingElse", "someValue"),這是由數據存儲不支持的根本。從Restrictions on queries

NOTOR!=運營商本身不支持, 但有些客戶端庫可以在雲存儲上添加支持。

這意味着,在最好的,你必須跳火圈,使這樣的工作,例如見,Google Datastore combine (union) multiple sets of entity results to achieve OR condition

我的建議是進行一次性遷移,並用它完成。這將包括以下步驟:

  • 最有可能的,你必須有在遷移過程中性能配置/活着,所以不只是重命名bar,而不是添加somethingElse不要立即刪除bar
  • 在所有的地方,你更新bar屬性還更新somethingElse相應
  • 添加邏輯來查詢具有bar但沒有somethingElse並把它們重新寫那麼他們也有所有實體3210。這一步完成後,所有的實體應該有一個somethingElse鏡像bar在你讀bar的價值交換閱讀somethingElse代替
  • 檢查含somethingElse所有索引服務於所有非查詢的地方
  • ,然後換你的查詢從barsomethingElse。有了這個實際的遷移已完成,您可以執行以下
  • 降清理步驟寫bar財產
  • 執行查詢對具有bar屬性的所有entitites並把它們重新寫不bar。請注意,這可能比真正從模型和指標讓這些實體單獨
  • 下降bar(如果適用於您的客戶端庫)更貴,但只有當你在上一步中刪除了所有的實體財產

此方法的遷移可以緩慢執行,因爲它不需要完全關閉服務,因此可以通過live進行遷移。

+0

謝謝丹。我得出了同樣的結論。 – William

0
votes
answers
5 views
+10

如何在Mobile iOS/Android上使用JS阻止屏幕截圖?

-5

我試圖停止使用JavaScript的移動設備上的屏幕截圖事件,因爲在PC上更容易,我只用事件keyCode == 44停止。如何在Mobile iOS/Android上使用JS阻止屏幕截圖?

非常感謝。

+2

你不能。你也不能在PC上做。有太多不同的方法來拍攝屏幕照片,包括字面上拍攝屏幕的照片。即使你使用JS實現了一些東西,也可以使用控制檯來禁用它。 – Carcigenicate

+2

heh。你沒有阻止PC上的任何東西。繞過你試圖實現的任何塊都是微不足道的。 – JJJ

+0

[如何防止Android設備拍攝我的網頁截圖?](https://stackoverflow.com/questions/31099410/how-do-i-prevent-an-android-device-from -a回吐-A-截圖 - 的 - 我的網頁) – JJJ

沙发
0
1

這是不可能的,因此截圖的事情是iOS原生功能和獨立於任何應用程序,你不能停止通過編碼的應用程序截圖。

板凳
0
0

您可以防止用戶從屏幕截圖操作旗與Android中

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); 

有適用於iOS設備,您可以防止截屏編程,但我不認爲這是有JS的解決方案另一種解決方案。

編輯:這些解決方案的應用程序不適合網站!

0
votes
answers
5 views
+10

圖書館是建設應用程序必不可少的?

-3

我最近開始學習編碼,我實際上不知道從哪裏開始做一些研究後,我決定學習JavaScript語言作爲第一步。在完成關於freecodecamp的課程後,我不知道下一步該怎麼做,我聽到了很多事情,我覺得我什麼都不知道。我希望有人實際上幫助我理解語言之前的基本知識,html css ... 這裏是我的問題: 圖書館是建立一個網站或創建遊戲必不可少的? 什麼是用戶界面? (我聽說它的網頁設計雖然我也聽說,CSS也是網頁設計) 什麼是框架? 所有語言都有庫嗎? 你能發展離不開圖書館或框架的工作應用只是使用CSS HTML和JavaScript(例如)圖書館是建設應用程序必不可少的?

+2

歡迎來到堆棧溢出!這個問題要麼過於寬泛,要麼基於觀點**,要麼需要討論,所以是堆棧溢出的主題。如果您有特定的,可回答的編程問題,請提供完整的詳細信息。 –

沙发
0
-3

一些庫必須建立一個網站或創建遊戲?

是的。您編寫的任何代碼將從根本上成爲您的圖書館。

什麼是用戶界面和用戶?

UI是û SER 覆蓋整個院落,需要輸入的任何工具的。 UX是給定接口的經驗。例如,飛機駕駛員有一個接口來控制飛機,並且控制器有意義地安排給飛行員安全飛行的能力。用戶體驗的結果取決於飛行員完成任務的能力。

什麼是框架?

框架是爲特定任務部署多個功能的基礎。例如,機場專門管理乘客如何通過航空旅行到達和離開新位置。同樣,一個划船碼頭專門管理乘客在水上行駛的方式。這裏列出幾個網頁框架:Github Frameworks

所有的語言都有庫嗎?

大多數語言都包含內置庫。例如,Javascript包含基本的數學函數。

你能發展離不開圖書館或框架的工作只是使用CSS HTML和JavaScript(例如)應用

是,也不是。 HTML是一種標記語言,CSS用於設計您的信息。基本上,您可以使用html編寫靜態Web應用程序,使用CSS隱藏或顯示信息,並鏈接到其他頁面。如果您打算編寫具有操縱HTML或CSS功能的應用程序,則需要使用編程語言,如Javascript。

板凳
0
-3

圖書館是建立一個網站或創建遊戲必不可少的?以某種方式,但如果您正確使用它們,它們會讓您的生活變得更輕鬆。

什麼是UI和UX?用戶體驗和用戶界面。第一個(UX)負責研究用戶,並規劃和設計任何平臺,應用程序等的基本結構和流程;後者(UI)使用用戶體驗結果管理最終設計,它的外觀,以及所有的互動。

什麼是框架?編碼語言庫。當你開發時,它們非常有用,如果你能解決一些通用的函數風格,可以幫助你節省時間。就個人而言,我仍然定製外觀,因爲他們中的一些看起來有點過於通用

所有語言都有庫嗎?他們中的大多數人,是的。我所知道的所有Web開發語言都是。

您可以使用css html和javascript(示例)開發沒有庫或框架的應用程序嗎?是的,但對於這些語言來說,這聽起來像是浪費時間不使用它們。在這3個基礎開始將是Bootstrap,jQuery和他們的

0
votes
answers
2 views
+10

快遞JS顯示數據通過ID

2

我使用的mongodb與收集結構如下:快遞JS顯示數據通過ID

聊天機器人收集

{ 
    "_id" : ObjectId("5a2f8edf84b906480af0d121"), 
    "botname" : "Welcome Chat", 
    "description" : "Welcome Chat", 
    "status" : "Inactive" 
} 

route.js

app.get('/cpanel/chat-bot/:id', function(req, res) { 
     if (req.session.user == null) { 
      res.redirect('/cpanel/login'); 
     } else { 
      CB.getAllRecords().then(results => { 
      res.render('cpanel/chat-bot/:id', { udata : req.session.user, chatbot: results}); 
     }).catch(err => { 
       res.sendStatus(500); 
      }); 
     } 
    }); 

index.ejs

<ul class="menu-sidebar"> 
     <% for(var i = 0; i < chatbot.length; i++) { %> 
      <li> 
      <a href="/cpanel/chat-bot/:id"><span class="fa fa-circle-o"></span><%= chatbot[i].botname %></a> 
      </li> 
     <% } %> 
     </ul> 

如何顯示數據聊天bot通過id從mongodb?當我點擊url 1(/ cpanel/chat-bot/1)時,它會顯示來自mongodb的數據id 1,當我點擊url 2(/ cpanel/chat-bot/2)時,它會顯示來自mongodb的數據id 2?謝謝

沙发
0
1

當您配置像

app.get('/cpanel/chat-bot/:id', ...) 

路由的路由的:id部分指出,要匹配的路徑的一部分的任何值,然後快速將放置任何被匹配到req.params.id。因此,如果要將該值用作數據庫查詢的一部分,則需要在數據庫查詢中使用req.params.id,以便僅從數據庫中選擇所需的數據。

另外,你不要在渲染路徑中使用:id所以從這裏將其刪除:

res.render('cpanel/chat-bot/:id', ...); 

這應該只是你的模板文件的路徑(無論模板的文件名是):

res.render('cpanel/chat-bot', ...); 

你不透露太多關於數據庫中的數據,以便我們能真正與你將如何使用req.params.id值幫助不選擇所需的DAT一個來自你的數據庫。我認爲你會在某種查詢中使用它。

+0

你能給我一個樣品嗎? –

+0

@ArifFirmansyah - 什麼樣的? – jfriend00

+0

如何使用適合我的情況的req.params.id的示例? –

0
votes
answers
2 views
+10

使用redux的Tab Navigator性能問題

1

我正在使用React native 0.50.4react navigation 1.0.0-beta.19。我有一個性能問題。我使用Tab navigator與4個選項卡基本上每個表單(最多11個字段) 我已經將所有表單字段(全部4個選項卡)以redux狀態連接起來。以便在最後一個選項卡保存時數據可用。使用redux的Tab Navigator性能問題

現在用戶可以在編輯時(通過單擊按鈕編輯)導航到此Tab navigator,每個標籤的componentDidMount。我正在派遣行動創作者,填充每個領域的狀態。然後在渲染方法中填充字段值(來自mapStateToProps)。

注意:沒有數據是從這裏服務器獲取的數據通過導航狀態點擊編輯按鈕

性能問題是其中點擊Edit button時,它需要很少的時候過去了在執行導航之前幾秒鐘(在真實設備上,在仿真器上沒有性能問題)。我想有負荷狀態componentDidMount執行所有其他調度之前啓動,但仍,導航不會立即發生(這意味着它不會航行,並展示加載狀態,一旦一切準備就緒,只顯示)

constructor(props){ 
    super(props); 
    props.initialLoader(); // STATE HERE LOADING: TRUE 
} 

componentDidMount(){ 
if (this.props.navigation.state.params){ 
    const userData = this.props.navigation.state.params.userData; 

    this.populateOperation(userData).then(() => { 
     this.props.dismissLoader(); // LOADING: FALSE 
    }); 

} 
} 
populateOperation = (userData) => { 
    return new Promise((resolve) => { 
     resolve(
      this.props.inputChanged(userData.emailAddress), 
      this.props.addressInputChanged(userData.address), 
      this.props.addressContInputChanged(userData.addressCont), 
      this.props.cityInputChanged(userData.city), 
      this.props.stateInputChanged(userData.state), 
      this.props.postalCodeInputChanged(userData.postalCode), 
      this.props.countryInputChanged(userData.country == ''? 'Country' : userData.country), 
      this.props.phoneInputChanged(userData.phone), 
      this.props.mobilePhoneInputChanged(userData.mobile), 
      this.props.linkedInInputChanged(userData.linkedIn), 
      this.props.twitterInputChanged(userData.twitter), 
     ); 
    }); 
} 

render(){ 
    const {...} = this.props.formState; 
    return(
    <KeyboardAwareScrollView 
     style={outerContainer} 
     keyboardOpeningTime={100} 
     extraScrollHeight={5} 
    > 
    { 
     loading ? 
     ... // SHOW LOADING 
     : 
     ... // FORM 
    } 

    ); 
} 

function mapStateToProps (state){ 
    return { 
     formState: state.contactReducer 
    } 
} 

function mapDispatchToProps(dispatch){ 
    return { 
     ... 
    } 
} 

export default connect(mapStateToProps, mapDispatchToProps)(ContactTab); 

上面的代碼是其中一個選項卡的示例。

注意:在使用終極版,性能的thunk時,是非常糟糕的,花了高達7秒也許更多瀏覽,切換到終極版 - 傳奇之後,它變得越來越快,服用3-4秒導航 注意:標籤導航器嵌套在頂層堆棧導航器中。

沙发
0
0

爲什麼調度11行動,當你可以只調度一個動作來更新商店?

每次調度都會導致潛在的重新呈現,這可能是您的性能問題的原因。

+0

這不是一個答案。它應該是對這個問題的評論。 – pcarter

+0

你是對的,我不知道爲什麼我沒有看到。 – Yasir